首页 新闻 会员 周边

Asp.net mvc razor下Model继承关系问题

0
悬赏园豆:20 [已解决问题] 解决于 2013-12-21 01:43

项目中很多时候需要定义自己的view基类,由于Razor的特殊性,所以他的基类只剩下一个WebViewPage这个类,无论是view还是partial view都是这个基类。而我们知道传统的web form的view的基类是WebFormView,partialview的基类是ViewUserControl。

由此我们知道razor的设计让我们更加方便实现。

定义:

Model:

class Parent;

class Child : Parent;

 

View基类:

Base<T> : WebViewPage<T> where T : class, new()

ChildBase<T> : Base<T> where T: Parent, new()

 

View:

partial view - test1:头部声明

@inherits ChildBase<Child>

 

main 页面在调用 test的代码:

@Html.Partial("test1", new Parent())

这里我想利用model的继承性来实现多个partial view的分离。

可是每次运行都会报错:

传入字典的模型项的类型为“Mvc4Example.Common.Parent”,但此字典需要类型“Mvc4Example.Common.Child”的模型项。

 

这个问题让我很纠结,因为在web form模式下这种设计是可以实现的,不知道为什么在Razor下不能运行了,还请哪位大拿给解释一下,万分感谢。

shen110的主页 shen110 | 初学一级 | 园豆:158
提问于:2013-11-16 11:21
< >
分享
最佳答案
0

问题解决。

shen110 | 初学一级 |园豆:158 | 2013-12-21 01:42
其他回答(1)
0

你的test1这个View继续自 ChildBase<Child>, 这个类的参数是一个Child类,你给人传一个Parent实例,不带这样的吧? 既然 test1 视图只需要一个 Parent 实例就可以执行, 为什么不声明成 ChildBase<Parent> ?

 

(装B得)PS:

不要为了代码复用而进行继承,继承的唯一目的是多态, 或者简单讲:只有在可以从调用方的代码中去除if/switch结构时使用继续 (引自 C++FAQ)

收获园豆:20
Todd Pointer | 园豆:379 (菜鸟二级) | 2013-11-16 14:32

多谢这位大拿的指点。弱弱的问您一句,您对.net framework熟悉吗,有个协变,逆变的概念,能否给小弟讲解一下。多谢。

算是遇到大拿了。

支持(0) 反对(0) shen110 | 园豆:158 (初学一级) | 2013-11-16 17:30

@shen110: 没深入研究过,看过介绍,基本意思就是一种能从 ISome<Derived> 转换成 ISome<Base> 或相反的东西。 感觉原理应该是当 Some<T> 继承 ISome<T> 时, 对 Some<T> 进行类型实例化(动态生成) Some<Derived> 时, 为生成的 Some<Derived> 自动添加接口 ISome<Base>。

支持(0) 反对(0) Todd Pointer | 园豆:379 (菜鸟二级) | 2013-11-16 19:05

@Todd Pointer: 多谢,有时间多向您请教了,谢谢

支持(0) 反对(0) shen110 | 园豆:158 (初学一级) | 2013-11-16 22:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册