我想要設計我的自定義編輯器模板,以便它們即使在傳遞空模型時也能正常工作。即當Model
爲空時的@Html.EditorForModel()
。是否有適當的方法來檢查EditorTemplate中模型的屬性值
我的問題是,當我在一個EditorTemplate,我有時需要訪問該模型的特性之一,它變得很老的寫作@if(Model != null && Model.[Property] ...)
例如
@model MyObject
@if(Model.BoolProperty) // throws NullReferenceException
{
<div>...additional stuff here</div>
}
@Html.EditorFor(m => m.OtherProperty)
我考慮添加如下的擴展方法
public static R GetValue<T, R>(this WebViewPage<T> viewPage, Func<T, R> selector)
{
if (selector == null) throw new ArgumentNullException("selector");
if (viewPage == null) throw new ArgumentNullException("viewPage");
if (viewPage.Model == null) return default(R);
return selector(viewPage.Model);
}
並在編輯器模板中使用這樣的
@model MyObject
@if(this.GetValue(m => m.BoolProperty)) // Safely gets value or false
{
<div>...additional stuff here</div>
}
@Html.EditorFor(m => m.OtherProperty)
但我想知道是否有一個內置的或「正確」的方法來嘗試如果模型的存在是爲了訪問這些屬性,不扔NullReferenceException
。
嗨,即使模型爲空,我仍然想顯示編輯器字段,我只是想根據模型的屬性在編輯器模板中隱藏/顯示/更改某些字段。例如,如果'Model'具有'IsRemovable'屬性,那麼當它被設置爲'true'時,我可能會渲染一個刪除按鈕,否則我不會渲染一個。很明顯,我可以編寫@if(Model!= null && Model.IsRemovable)',但是在有這些情況時會變得很渺茫,我想知道是否有內置的幫助器來處理這個問題。或者,也許我正在接近錯誤的問題。謝謝! – NKeddie 2012-04-19 13:22:38
那麼你可以做一些這樣的模型是永遠不會爲空,這將避免你這個檢查。 – 2012-04-19 13:40:51
看起來好像沒有更好的方法。謝謝。 – NKeddie 2012-04-19 15:50:45