2010-05-21 44 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)) %> 
相關問題