代码之家  ›  专栏  ›  技术社区  ›  Jay Stevens hutchonoid

在视图中,从模型中隐藏与空值相关的HTML最有效的方法是什么?

  •  1
  • Jay Stevens hutchonoid  · 技术社区  · 15 年前

    这可能是一个非常简单的问题,有一个简单的答案,但当涉及到ASP.NET(MVC)时,我还是个新手。

    我正在从我的模型中返回一个地址(分块)。某些组件为空。是否有一种简单或流畅的方法来检查空值,而不需要大量额外的代码来确定是否显示相关的周围HTML(不仅仅是值)?

    例子:

    <% foreach (var item in Model)
       { %>
    
        <h3>
            <%= Html.ActionLink(item.name, "Details", new { id = item.ID})%></h3>
        <div>
            <%= Html.Encode(item.address) %><br />
            <%= Html.Encode(item.city) %>,
            <%= Html.Encode(item.state) %>
            <%= Html.Encode(item.zip) %>
        </div>
    <% } %>
    

    在上面的示例中,如果有空值 item.address 我想要 <br/> 标记也要隐藏,以便只显示城市、州的邮政字符串。

    我在找一个比 <% if () { %> 有条件的。谢谢。

    3 回复  |  直到 15 年前
        1
  •  3
  •   womp    15 年前

    您可以为htmlhelper编写一个扩展方法,检查它是否为空,如果为空或字段,则不会输出任何内容。+ <br /> 如果不是的话。

    public static string FieldLine(this HtmlHelper helper, object value, bool addBr) 
    {
        if (value == null)
        {
            return string.Empty;
        }
        else if (addBr)
        {
            return helper.Encode(value) + "<br />";
        }
        else
        {
            return helper.Encode(value);
        }
    }
    

    记住要将扩展类的名称空间导入到视图ASPX中。对于这个示例,如果我的命名空间是“mvcapapplication1.extensions”,我将使用

    <%@ Import Namespace="MvcApplication1.Extensions" %>
    

    在我视线的顶端。然后,要使用它,只需:

    <%= Html.FieldLine(item.address, true) %>
    <%= Html.FieldLine(item.city, true) %>
    

    等。

        2
  •  2
  •   datacop    15 年前

    我正在根据上面描述的内容添加另一个答案。我会让这个助手比他更通用一点,并且仍然尊重原始编码…

    public static string EncodeWithHtml(this HtmlHelper helper, object value, string html) 
    {
       if (value == null)
       {
          return string.Empty;
       }
       else
       {
          return helper.Encode(value) + html;
       }
    }
    

    这将允许您执行以下操作:

    <%= Html.EncodeWithHtml(item.address, "<br />") %>
    

    <%= Html.EncodeWithHtml(item.address, "<img src=\"images\home.gif\"><br />") %>
    
        3
  •  0
  •   datacop    15 年前

    假设item.address是字符串…

    <%= Html.Encode(item.address) %>
    <% if (!string.IsNullOrEmpty(item.address)) { %>
    <br />
    <% } %>
    

    当然,这是在小评论框中打印出来的,所以要注意拼写、大小写等。