2009-07-09 67 views
1

我目前正在将ASP.NET WebForms应用程序移植到ASP.NET MVC。什么是有条件显示标签的ASP.NET MVC等价物?

在网页中的一个有其上显示有条件地基于在代码隐藏变量的ASP.NET Label控件。因此,

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

其中,ShowLabel是代码隐藏中的布尔值。标签的内容在运行时生成,并且每次都会有所不同。

有更好的方法来做到这一点,即使在ASP.NET,但是这将是在ASP.NET MVC做到这一点的最好方法是什么?你甚至应该如何在ASP.NET MVC中以类似于ASP.NET Label对象的方式呈现动态文本?

+0

我想你指的WebForms。 – 2009-07-09 15:50:05

回答

4

相信在具有用于每一个浏览ViewModel类(除非它是一个非常简单的视图)的Thunderdome principle

所以我想有一个ViewModel类像下面这样:

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; 
    } 
} 

在你的控制,这样做,

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

哪里指数型IndexViewModel的强类型视图。

然后,在你看来只是做这样的事情:

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

MVC中的主要思想是不通过你要显示的字符串;你应该把相关的对象传递给你的视图,而视图又会决定是否显示该标签(如果使用Simucal的示例,则使用简单的对象)。

所以,与其做

if (Model.labelIsVisible) { 

人会做

if (Model.Comments == 0) { 

例如,如果该标签将显示一个提示用户上的评论文章。

0

把你的元素和隐藏设置()函数那样:

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


$("#label").hide();` 
相关问题