在Razor中检查null的Syntactic Sugar

时间:2013-02-20 08:22:32

标签: c# asp.net-mvc-3 razor razor-2

有没有更好的方法来编写razor cshtml来检查嵌套对象的null,这样如果容器为null,它就不会在容器对象上抛出null异常错误。例如:

page.cshtml

Hello @obj1.obj2.prop3
如果obj1为null或obj1.prop3为null,则

将抛出错误,但

Hello @Html.DisplayFor(m => obj1.obj2.prop3)

可以在obj1或obj1.obj2上检查null,这样就不会抛出错误

Hello @(obj1 == null? "" : (obj1.obj2 == null? "" : obj1.obj2.prop3))

太长了

1 个答案:

答案 0 :(得分:1)

您可以尝试创建自己的html帮助器:

static class MyOwnHtmlHelpers
{
    public static string EmptyIfNull<TModel>(this HtmlHelper<TModel> helper, Func<TModel, string> accessor)
    {
        try
        {
            var result = accessor.Invoke(helper.ViewData.Model);
            return result;
        }
        catch(NullReferenceException)
        {
            return string.Empty;
        }
    }
}

然后像这样使用它:

@Html.EmptyIfNull(m => obj1.obj2.prop3)