更新 问题是语法问题。 @awrigley显示了在Razor中写这个的正确方法。
以下作品:
@if(Model.Thing.Prop != null)
{
Html.RenderPartial("SomePartialView", Model.Thing.Prop);
}
您需要将给定Foo
的前1 Bar
的详细信息显示为HTML表格。如果Foo
为空,如何隐藏空表或显示“未找到”消息?
例如。我在下一行收到NullReferenceException
,因为Model.Thing.Prop
是null
;
@{Html.RenderPartial("SomePartialView", Model.Thing.Prop);}
故意为null,我的Repository返回null而不是空Foo
。但是,除了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
。
答案 0 :(得分:2)
我认为你不想使用......
@if (Model.Thing.Prop != null)
{Html.RenderPartial("SomePartialView", Model.Thing.Prop);}
...因为你还想渲染局部视图的一部分吗?
哦,不。已正确阅读您的帖子。
我不知道为什么上面的代码不适合你。
请记住,在Razor中,@可以使用两种方式:
执行陈述:
@ { 我的声明; }
评估HtmlHelper,类方法,属性或变量,它返回某种形式或其他形式的字符串(例如,HtmlString,MvcHtmlString或string)。例如:
@ MyClass.MyStringProperty
请注意,在案例2中,不需要终止半冒号。
1和2表示如果你有一个htmlhelper返回一个字符串以外的东西(例如,void),那么你必须按如下方式调用它:
@{Html.MyHelperThatReturnsVoid;}
使用返回字符串或HtmlString或MvcHtmlString的HtmlHelper,您可以简单地写:
@Html.MyHelperThatReturnsAString
有关详细信息,请参阅我提出的问题的接受的答案:
Custom HtmlHelper that returns void problem
答案 1 :(得分:0)
这可能是MVC3的变化,也可能是奇怪的。
MVC2行为:
如果Model.Thing为null,那么它是一个空引用异常
如果Model.Thing存在且Thing.Prop为null,那么您将向模型传递空引用。当您将null ref传递给模型时,父模型(此处的Model)将作为模型传递给期望类型为Prop的“SomePartialView”(除非Model和Prop是相同的类型)。
考虑到你得到null ref,我将假设Model.Thing为null。在这种情况下,您唯一的解决方案是@if语句。将null传递给模型ref根本不起作用,我已经在行为上撕掉了一些头发。
同样,这是MVC2行为,如果这对MVC3有所改变,你真的可以通过一个空模型,真棒!