C# 在Razor中检查null的语法糖
有没有更好的方法来编写cshtml代码,检查嵌套对象是否为null,以便在容器为null时不会在容器对象上抛出null异常错误。例如: page.cshtmlC# 在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? "" : (
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)