我想要设计我的自定义编辑器模板,以便它们即使在传递空模型时也能正常工作。即当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