1

我目前正在将 ASP.NET WebForms 应用程序移植到 ASP.NET MVC。

在其中一个页面中有一个 ASP.NET Label 控件,它根据代码隐藏中的变量有条件地显示。所以,有些东西的效果

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

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

即使在 ASP.NET 中也有更好的方法来执行此操作,但是在 ASP.NET MVC 中执行此操作的最佳方法是什么?您甚至应该如何以类似于 ASP.NET Label 对象的工作方式在 ASP.NET MVC 中呈现动态文本?

4

3 回答 3

4

我相信Thunderdome 原则,即每个视图都有一个 ViewModel 类(除非它是一个非常简单的视图)。

所以我会有一个 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);
}

其中 Index 是 IndexViewModel 类型的强类型视图。

然后,在您看来,只需执行以下操作:

<% if (Model.labelIsVisible) { %>
 <%= Model.labelText %>
<% } %>
于 2009-07-09T15:51:38.447 回答
1

MVC 的主要思想是不传递你想要显示的字符串;您应该将相关对象传递给您的视图,然后视图将决定是否显示该标签(这是使用简单的 if,就像在 Simucal 的示例中一样)。

所以,而不是做

if (Model.labelIsVisible) {

一个会做

if (Model.Comments == 0) {

例如,如果标签将提示用户评论一篇文章。

于 2009-07-09T15:58:53.313 回答
0

将你的元素放入并设置 hide() 函数,如下所示:

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


$("#label").hide();`
于 2012-03-29T14:10:25.610 回答