2009-06-16 159 views
0

我有一个的ViewPage与继承的部分看起来像.NET MVC的ViewPage <T1>和ViewUserControl <T2>行为

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

,并与继承部分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传递给控件,​​它看起来像框架试图传递Model(即type = User)并抛出错误(意外类型)。

无视我的地址为空的事实是,默认父对象的行为会导致错误或预期行为。如果它是预期的行为,那么有人可以解释为什么?我不明白。

回答

1

很多时候,这些问题导致OP在其他地方犯了一个错误,并且错误是不可重现的。我试着重新创建你的确切场景,你知道些什么?你实际上是正确的:)我创建了一个简单的父/子关系,并且View的类型为child,而部分type为child.Parent的类型为null,并且我没有得到空引用,事实上我做了获取类型不匹配错误。事实上,即使明确地传递空到视图:

Html.RenderPartial("MyPartial",null); 

,甚至有直接投:

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

它仍然给了失配误差。

猜测,这确实是一个总的猜测是,当它检测到在传递的对象为null,它只是默认使用实际的视图模型本身。我不确定这是否是由设计或错误,但这是唯一有意义的。

+0

感谢您确认的行为。至少我现在知道它不只是我。让我们希望有人有答案。 +1为你付出的努力:-) – 2009-06-16 13:28:27

0

我相信你应该避免将null模型传递给你的Views。如果您的模型为空,请使用默认/空模型。这应该工作:

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

同意,但我对默认使用'用户'模式的行为更加好奇:-( – 2009-06-16 15:24:28

相关问题