5

更新 问题是语法问题。@awrigley 展示了在 Razor 中编写此代码的正确方法。

以下作品:

@if(Model.Thing.Prop != null)
{
    Html.RenderPartial("SomePartialView", Model.Thing.Prop);
}

您需要以HTML 表格的形式显示Foo给定的前 1 名的详细信息。Bar如果空表为空,如何隐藏空表或显示“未找到”消息Foo

例如。我NullReferenceException在下一行得到一个,因为Model.Thing.Propnull

@{Html.RenderPartial("SomePartialView", Model.Thing.Prop);} 

它是故意为空的,我的存储库返回 null 而不是空的Foo。但这有点离题,即给定一个 null Model.Thing.Prop,我不想调用Html.RenderPartial.

更新
我试过以下没有运气:

@if(Model.Thing.Prop != null)
{
    @{Html.RenderPartial("SomePartialView", Model.Thing.Prop);}
}

这导致 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>
}

但这会导致NullReferenceException我的局部视图中出现,这似乎不正确。Model.Thing绝对是有效的Bar并且Model.Thing.Prop绝对是null Foo.

4

2 回答 2

2

我想你不想使用...

@if (Model.Thing.Prop != null)
{Html.RenderPartial("SomePartialView", Model.Thing.Prop);} 

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

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

我不知道为什么上面的代码对你不起作用。

编辑:

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

  1. 执行语句:

    @{ 我的声明; }

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

    @MyClass.MyStringProperty

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

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

@{Html.MyHelperThatReturnsVoid;}

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

@Html.MyHelperThatReturnsAString

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

返回 void 问题的自定义 HtmlHelper


于 2010-11-23T22:50:57.710 回答
0

这要么是 MVC3 的变化,要么是奇怪的事情。

MVC2 行为:
如果 Model.Thing 为空,那么是的,它是空引用异常。
如果 Model.Thing 存在且 Thing.Prop 为空,那么您将向模型传递空引用。当您将 null ref 传递给模型时,父模型(此处的模型)作为模型传递给“SomePartialView”,它期望类型为 Prop(除非 Model 和 Prop 是相同的类型)。

考虑到您得到空 ref,我将假设 Model.Thing 为空。在这种情况下,您唯一的解决方案将是 @if 语句。将 null 传递给模型 ref 根本行不通,我已经为这种行为扯了一些头发。

同样,这是 MVC2 的行为,如果这对 MVC3 有更改,您可以诚实地传递一个空模型,太棒了!

于 2010-11-23T22:59:16.770 回答