視圖應該只包含視圖邏輯,甚至應該只擴展到從視圖模型輸出屬性。
控制器通常負責構建此視圖模型,並且此時您應該默認任何屬性,以確保在嘗試顯示它們時它們不爲null。
因此,例如,在控制器,你可能有:
var emptySalesRep = new SalesRep();
var model = new MyModel();
model.salesRep1 = repository.GetSalesRep1() ?? emptySalesRep;
現在,它可能是你有很多這方面的,所以你可以選擇,而不是離開salesRep1
空,並有另一種方式在視圖中處理此問題而不回覆到大量的if(Model.salesRep1 != null){ ... }
。
的擴展方法可以用於(雖然我更喜歡上面的方法)
public static string DisplayForWhenNotNull<T>(this HtmlHelper html, Func<T> obj, Func<T,object> prop)
{
var item = obj();
if(item == null)
{
return null;
}
return prop(item);
}
用法:
<td class="label">Sales Rep #1:</td>
<td class="val">@Html.DisplayForWhenNotNull(() => Model.salesRep1, sr => sr.name)</td>
否,並且也不應該有。在構建ViewModel時處理這些問題! – Jamiec
難道你不能在文件的開頭放置@if(Model.salesRep1 == null)Model.salesRep1 = new XXX();'? –
@MenelaosVergis - 這是*不*顯示邏輯,因此不應該在視圖中。但是,這只是構建ViewModel時應該執行的操作。 – Jamiec