什么是保护ASP.NET MVC中的NullReferenceExceptions的正确模式

Gre*_*g B 5 asp.net-mvc renderpartial nullreferenceexception razor asp.net-mvc-3

更新 问题是语法问题.@awrigley显示了在Razor中编写它的正确方法.

以下作品:

@if(Model.Thing.Prop != null)
{
    Html.RenderPartial("SomePartialView", Model.Thing.Prop);
}
Run Code Online (Sandbox Code Playgroud)

您需要显示作为HTML表格Foo的给定顶部1的详细信息Bar.如果为空,如何隐藏空表或显示"未找到"消息Foo

例如.我正在接受NullReferenceException以下一行,因为Model.Thing.Propnull;

@{Html.RenderPartial("SomePartialView", Model.Thing.Prop);} 
Run Code Online (Sandbox Code Playgroud)

故意为null,我的Repository返回null而不是null Foo.但这有点撇开,即给定一个null Model.Thing.Prop,我不想打电话给Html.RenderPartial.

更新
我尝试了以下没有运气:

@if(Model.Thing.Prop != null)
{
    @{Html.RenderPartial("SomePartialView", Model.Thing.Prop);}
}
Run Code Online (Sandbox Code Playgroud)

这导致Visual Studio告诉我它预期;第1行第1列也是第1行第1列;的无效表达式(我猜这是由于MVC3的预发布状态),如果我在我得到的浏览器中点击页面

CS1501:方法'Write'没有重载需要0个参数

@Html.RenderPartial突出显示该行.

我也试过了

@if(Model.Thing.Prop != null)
{
    <text>
    @{Html.RenderPartial("SomePartialView", Model.Thing.Prop);}
    </text>
}
Run Code Online (Sandbox Code Playgroud)

但这会导致NullReferenceException我的部分视图中出现一个似乎不对的内容.Model.Thing绝对是有效的Bar,Model.Thing.Prop绝对是一个null Foo.

awr*_*ley 2

我猜你不想用...

@if (Model.Thing.Prop != null)
{Html.RenderPartial("SomePartialView", Model.Thing.Prop);} 
Run Code Online (Sandbox Code Playgroud)

...因为您仍然想渲染部分视图的一部分?

不好了。已正确阅读您的帖子。

我不知道为什么上面的代码不适合你。

编辑:

请记住,在 Razor 中,@ 可以通过两种方式使用:

  1. 执行语句:

    @{ 我的声明; }

  2. 评估 HtmlHelper、返回某种形式或其他形式的字符串(例如,HtmlString、MvcHtmlString 或字符串)的类方法、属性或变量。例如:

    @MyClass.MyStringProperty

请注意,在情况 2 中,不需要终止分号。

1 和 2 表明如果您有一个 htmlhelper 返回字符串以外的内容(例如 void),那么您必须按如下方式调用它:

@{Html.MyHelperThatReturnsVoid;}
Run Code Online (Sandbox Code Playgroud)

而对于返回字符串或 HtmlString 或 MvcHtmlString 的 HtmlHelper,您可以简单地编写:

@Html.MyHelperThatReturnsAString
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅我提出的问题的已接受答案:

自定义 HtmlHelper 返回 void 问题