在asp.net Razor视图中,无论如何只是继续出错?

时间:2014-03-12 14:04:25

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

所以,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添加到页面顶部并且不用担心空值会非常光滑。有没有类似的解决方案?

谢谢,

2 个答案:

答案 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在那里不为空。