当值不为null时,清除在ASP.NET MVC视图中输出值的方法

Swo*_*op 8 asp.net asp.net-mvc

有没有更好的方法来编写下面的代码?我有相当多的块,这使得Viewpage中的代码非常混乱.

只有在满足某些条件时才需要输出带有相关标签的数据值,如果该值不为空,则几乎总是如此.

我可以想到的选项是使用response.write来最小化ASP脚本标记的使用,或者格式化网页是这样一种方式,标签显示具有适当的n/a类型值.

<% if (myData.Balance != null)
{ %>                       
   Balance: <%= String.Format("{0:C}", (myData.Balance))%>                        
<% } %>
Run Code Online (Sandbox Code Playgroud)

Nat*_*lor 8

如果在System.ComponentModel.DataAnnotations中使用DisplayFormatAttribute类,则可以在视图中显式控制空值的输出,而无需处理内联脚本标记.它本身不会帮助您删除与值绑定的标签,但如果值为null,您至少可以自动替换输出.

[DisplayFormat(NullDisplayText = "N/A", DataFormatString = "{0:c}")]
public double? Price { get; set; }

<%=Html.DisplayFor(m => m.Price)%>
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,如果值为null,它将自动显示"N/A",否则它将使用默认货币格式显示值.

作为替代方案,如果您也想删除标签并且不想在视图中处理脚本标记,您可以创建自己的HtmlHelper,它采用相同格式的表达式Html.DisplayFor(expression),然后返回an Html.LabelFor(expression)Html.DisplayFor(expression)if 的组合输出.并且仅当映射到该表达式的值不为null时.

  • 原谅我的无知,如果不是这样的话,这只是一个猜测:你可以为`NullDisplayText`使用空字符串""代替"N/A",并将标签放在`DataFormatString`中(例如作为"平衡:{0:c}")并实现OP的要求? (3认同)