Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Razor中检查null的语法糖_C#_Asp.net Mvc 3_Razor_Razor 2 - Fatal编程技术网

C# 在Razor中检查null的语法糖

C# 在Razor中检查null的语法糖,c#,asp.net-mvc-3,razor,razor-2,C#,Asp.net Mvc 3,Razor,Razor 2,有没有更好的方法来编写cshtml代码,检查嵌套对象是否为null,以便在容器为null时不会在容器对象上抛出null异常错误。例如: page.cshtml Hello @obj1.obj2.prop3 如果obj1为空或obj1.PROP3为空,则将抛出错误,但 Hello @Html.DisplayFor(m => obj1.obj2.prop3) 可以检查obj1或obj1.obj2上是否为null,这样它就不会抛出错误 Hello @(obj1 == null? "" : (

有没有更好的方法来编写cshtml代码,检查嵌套对象是否为null,以便在容器为null时不会在容器对象上抛出null异常错误。例如:

page.cshtml

Hello @obj1.obj2.prop3
如果obj1为空或obj1.PROP3为空,则将抛出错误,但

Hello @Html.DisplayFor(m => obj1.obj2.prop3)
可以检查obj1或obj1.obj2上是否为null,这样它就不会抛出错误

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

太长了

您可以尝试创建自己的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;
        }
    }
}

考虑不要将NULL作为模型中的属性传递,通常它可能有“空”对象(空字符串/默认值用于所有非REF属性),这样就可以避免所有这些空校验……我想这对你们所要完成的任务来说是非常短的;你有吗??运算符,但这在您的情况下不起作用,因为您需要访问更多属性。(Obj???”给出Obj,如果为空则为“”
@Html.EmptyIfNull(m => obj1.obj2.prop3)