我有一个浏览页面,其继承部分看起来像
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)并抛出错误(意外类型)。
忽略我的地址为空的事实,是默认为父对象的错误或预期行为的行为。如果是预期的行为,那么有人可以解释原因吗?我不明白。
答案 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 */});