我想设计我的自定义编辑器模板,以便它们即使在传递空模型时也能正常工作。即,@Html.EditorForModel()
何时Model
为空。
我遇到的问题是,当我在 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);
}
并像这样在 EditorTemplate 中使用它
@model MyObject
@if(this.GetValue(m => m.BoolProperty)) // Safely gets value or false
{
<div>...additional stuff here</div>
}
@Html.EditorFor(m => m.OtherProperty)
但我想知道如果模型存在,是否有内置或“正确”的方式来尝试访问这些属性,而不抛出NullReferenceException
.