2009-07-09 5 views
1

Je suis actuellement le portage d'une application ASP.NET WebForms à ASP.NET MVC.Quel est l'équivalent ASP.NET MVC de l'affichage conditionnel d'un Label?

Dans l'une des pages, il y a un contrôle Label ASP.NET qui est affiché conditionnellement sur la base d'une variable dans le codebehind. Donc, quelque chose à l'effet de

<asp:Label runat="server" Visible="<%# ShowLabel%>"> 
... 
</asp:Label> 

où ShowLabel est une valeur booléenne dans le codebehind. Le contenu de l'étiquette est généré au moment de l'exécution et sera à peu près différent à chaque fois.

Il existe de meilleurs moyens de le faire même dans ASP.NET, mais quelle serait la meilleure façon de le faire dans ASP.NET MVC? Comment êtes-vous censé rendre le texte dynamique dans ASP.NET MVC d'une manière similaire au fonctionnement de l'objet Label ASP.NET?

+0

Je pense que vous voulez dire WebForms. –

Répondre

4

Je crois au Thunderdome principle d'avoir une classe ViewModel pour chaque vue (sauf si c'est une vue très simple).

donc j'aurais une classe ViewModel comme ce qui suit:

public class IndexViewModel 
{ 
    public bool labelIsVisible { get; set; } 
    public String labelText { get; set; } 

    public IndexViewModel(bool labelIsVisible, String labelText) 
    { 
     this.labelIsVisible = labelIsVisible; 
     this.labelText = labelText; 
    } 
} 

Dans votre contrôleur, faites quelque chose,

public ActionResult Index() 
{ 
    // Set label to be visible in the ViewModel instance 
    IndexViewModel viewData = new IndexViewData(true, "Simucal rocks!"); 
    return View(viewData); 
} 

où l'indice est une vue fortement typé de type IndexViewModel.

Alors, selon vous il suffit de faire quelque chose comme:

<% if (Model.labelIsVisible) { %> 
<%= Model.labelText %> 
<% } %> 
1

L'idée principale dans MVC est de ne pas passer les chaînes que vous souhaitez afficher; vous devriez passer les objets pertinents à votre View, et la View, à son tour, déciderait si vous voulez ou non afficher cette étiquette (et ceci en utilisant un simple si, comme dans l'exemple de Simucal).

Ainsi, au lieu de faire

if (Model.labelIsVisible) { 

On ferait

if (Model.Comments == 0) { 

Par exemple, si l'étiquette serait de montrer une invite pour un utilisateur de faire des commentaires sur un article.

0

Prenez votre élément et régler la fonction hide() comme ça:

<div id="label"> 
    @Html.Label("myLabel", "text") 
</div> 


$("#label").hide();` 
Questions connexes