我有一个带有继承部分的视图页面,如下所示
Inherits="System.Web.Mvc.ViewPage<User>"和带有inherits部分的ViewUserControl,如下所示
Inherits="System.Web.Mvc.ViewUserControl<Address>其中User类(简称)本质上类似于:
class User {
public virtual Address address { get; set; }}
现在,如果我试一试:
Html.RenderPartial("Address", Model.address);然后我可能会得到一些奇怪的行为。在我的例子中,Model.address是null而不是将null传递给控件,看起来框架试图传递模型(即type=User)并抛出一个错误(意外类型)。
不管我的地址是空的这一事实,默认到父对象的行为是一个bug,还是预期的行为。如果这是预期的行为,那么有人能解释一下为什么吗?我还是不明白。
发布于 2009-06-16 13:15:18
通常,这类问题会导致OP在其他地方犯下错误,并且错误是不可重现的。我试着重现你的场景,你知道什么?你实际上是对的:)我创建了一个简单的父/子关系,并让视图的类型是子类型,而child.Parent类型的部分是空的,并且我没有得到空引用,我确实得到了类型不匹配的错误。事实上,即使显式地将null传递给视图:
Html.RenderPartial("MyPartial",null);或者甚至是直接投射:
Html.RenderPartial("MyPartial",(Parent)null);它仍然给出不匹配错误。
我的猜测,这实际上是一个猜测,当它检测到传入的对象为空时,它只是默认使用实际视图本身的模型。我也不确定这是设计的还是一个bug,但这是唯一有意义的事情。
发布于 2009-06-16 14:52:04
我相信你应该避免将空模型传递给你的视图。如果您的模型为空,则使用默认/空模型。这应该是可行的:
Html.RenderPartial("Address", Model.address ?? new Address { /* OPTIONAL: default values */});https://stackoverflow.com/questions/1001111
复制相似问题