2010-05-21 38 views
8

有没有更好的方式来编写下面的代码?我有几个相似的块,这使得Viewpage中的代码非常混乱。干净的方式来输出值在ASP.NET MVC视图值不为null时

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

我能想到的选项是使用response.write来尽可能减少ASP脚本标记的使用,或者对网页进行格式化,使标签以适当的n/a类型值显示。

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

回答

8

如果利用DisplayFormatAttribute类的System.ComponentModel.DataAnnotations您可以明确控制空值的视图中的输出,而不处理内嵌脚本标记。本身无助于删除与该值绑定的标签,但如果值为空,您至少可以自动替换输出。

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

<%=Html.DisplayFor(m => m.Price)%> 

与上面的代码,如果该值为null它会自动显示“N/A”,否则它会显示使用默认货币格式的值。

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

+3

原谅我的无知,如果不是这种情况,这是只是一个猜测:你可以使用空字符串“”而不是“N/A”作为NullDisplayText,并将标签放在DataFormatString中(例如“Balance:{0:c}”)和实现OP所要求的? – Funka 2010-05-22 02:08:20

+1

这可能会完美。好主意。 – 2010-05-22 18:21:23

2

如果你坚持格式字符串里面的“平衡”,并使用Response.Write,它最终看起来会更加清晰,我认为:

<% if (myData.Balance != null) 
     Response.Write(String.Format("Balance: {0:C}", myData.Balance)) %> 
相关问题