所以,vb有很多讨论"关于错误恢复",现在我真的需要在C#razor视图中这样的东西。
它可能不存在,买或许有另一种方法来完成类似的事情?
我试图创建一个简单的Razor View,它只是一个只用于打印的只读页面。但是这个视图会有很多字段,像这样几百行:
<td class="label">Sales Rep #1:</td>
<td class="val">@Model.salesRep1.name</td>
问题是salesRep可能为null,这会引发错误。如果我在@{if(Model.salesRep1.firstName != null){}}
语句中包装每个字段,页面上的代码量将大大增加。
将on error resume next
添加到页面顶部并且不用担心空值会非常光滑。有没有类似的解决方案?
谢谢,
答案 0 :(得分:2)
View应该只包含视图逻辑,甚至只应该扩展到从ViewModel输出属性。
控制器通常负责构建此视图模型,此时您应该默认任何属性,以确保它们在尝试显示时不会为空。
例如,在控制器中你可能有:
var emptySalesRep = new SalesRep();
var model = new MyModel();
model.salesRep1 = repository.GetSalesRep1() ?? emptySalesRep;
现在,可能你有很多这样的事情,所以你可以选择将salesRep1
保留为null,并在视图中有另一种方法来处理这个问题而不需要重新调整{{1} }。
可以使用扩展方法(虽然我更喜欢上述方法)
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);
}
答案 1 :(得分:0)
我没有在视图中检查空值,也没有尝试忽略错误,而是使用viewmodel并确保salesRep在那里不为空。