.net mvc ViewPage <t1>和ViewUserControl <t2>行为</t2> </t1>

时间:2009-06-16 12:17:57

标签: c# .net model-view-controller user-controls

我有一个浏览页面,其继承部分看起来像

Inherits="System.Web.Mvc.ViewPage<User>"

和ViewUserControl,其继承部分看起来像

Inherits="System.Web.Mvc.ViewUserControl<Address>

用户类(缩写)基本上如下:

class User {
public virtual Address address { get; set; }

}

现在,如果我尝试:

Html.RenderPartial("Address", Model.address);

然后我可能会得到一些奇怪的行为。在我的例子中,事实证明Model.address为null而不是将null传递给控件,​​看起来框架试图传递Model(即type = User)并抛出错误(意外类型)。

忽略我的地址为空的事实,是默认为父对象的错误或预期行为的行为。如果是预期的行为,那么有人可以解释原因吗?我不明白。

2 个答案:

答案 0 :(得分:1)

这些问题经常会导致OP在别处犯错,而且错误不可重复。我尝试重新创建你的确切场景,你知道什么?你真的是对的:)我创建了一个简单的父/子关系,并且View的类型是child,而child.Parent类型的部分是null,我没有得到空引用,我实际上做了得到类型不匹配错误。实际上,即使将null显式传递给视图:

Html.RenderPartial("MyPartial",null);

甚至是直接演员:

Html.RenderPartial("MyPartial",(Parent)null);

它仍然给出了不匹配错误。

我的 猜测 ,这确实是一个总猜测,当它检测到传入的对象为空时,它只是默认使用的模型实际观点本身。我不确定这是设计还是错误,但这是唯一有意义的事情。

答案 1 :(得分:0)

我相信你应该避免将null模型传递给你的视图。如果您的Model为null,请使用default / empty Model。这应该有效:

Html.RenderPartial("Address", Model.address ?? new Address { /* OPTIONAL: default values */});