首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.net mvc ViewPage<T1>和ViewUserControl<T2>行为

.net mvc ViewPage<T1>和ViewUserControl<T2>行为
EN

Stack Overflow用户
提问于 2009-06-16 12:17:57
回答 2查看 281关注 0票数 0

我有一个带有继承部分的视图页面,如下所示

代码语言:javascript
复制
Inherits="System.Web.Mvc.ViewPage<User>"

和带有inherits部分的ViewUserControl,如下所示

代码语言:javascript
复制
Inherits="System.Web.Mvc.ViewUserControl<Address>

其中User类(简称)本质上类似于:

代码语言:javascript
复制
class User {
public virtual Address address { get; set; }

}

现在,如果我试一试:

代码语言:javascript
复制
Html.RenderPartial("Address", Model.address);

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

不管我的地址是空的这一事实,默认到父对象的行为是一个bug,还是预期的行为。如果这是预期的行为,那么有人能解释一下为什么吗?我还是不明白。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-16 13:15:18

通常,这类问题会导致OP在其他地方犯下错误,并且错误是不可重现的。我试着重现你的场景,你知道什么?你实际上是对的:)我创建了一个简单的父/子关系,并让视图的类型是子类型,而child.Parent类型的部分是空的,并且我没有得到空引用,我确实得到了类型不匹配的错误。事实上,即使显式地将null传递给视图:

代码语言:javascript
复制
Html.RenderPartial("MyPartial",null);

或者甚至是直接投射:

代码语言:javascript
复制
Html.RenderPartial("MyPartial",(Parent)null);

它仍然给出不匹配错误。

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

票数 1
EN

Stack Overflow用户

发布于 2009-06-16 14:52:04

我相信你应该避免将空模型传递给你的视图。如果您的模型为空,则使用默认/空模型。这应该是可行的:

代码语言:javascript
复制
Html.RenderPartial("Address", Model.address ?? new Address { /* OPTIONAL: default values */});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1001111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档