2016-09-22 68 views
0

我试图重构视图和模型。此前,强类型的视图曾在CSHTML文件这种模式指令:使用类型为T或接口的Model类为强类型视图

@model MyViewModel<MySubViewModel> 

因为我已经确定了类型MySubViewModel必须要么一般或可继承的,因为我已经确定了多种类型,应该是可以互换位置。

首先我尝试这样做:

@model MyViewModel<T> 

...这我不能让工作,所以,一厢情愿地想,我尝试这样做:

@model MyViewModel<T> where T : IMySubViewModel 

...这是没有任何好,所以我终于试了这个:

@model MyViewModel<IMySubViewModel> 

...起初我以为这是工作,因为Visual Studio没有强调它。但是,我很快发现每个我都有剃须刀插入的地方,它显示的信息是错误的,即“当前上下文中不存在任何名称”的消息。这适用于ViewBag,Html帮助器和我的视图模型的所有用法。

那该怎么做呢?或者不能这样做?我知道我大概可以使用:

@model MyViewModel<dynamic> 

...但我宁愿不输智能感知因为我知道了“动态式”一直在不断地实现IMySubViewModel。

+1

什么是MyViewModel和IMySubViewModel的命名空间? – Jakotheshadows

+0

我恳求'@model MyViewModel '不起作用。我假设'MyViewModel'被定义为泛型类型,并且没有限制将阻止接口IMySubViewModel被用作泛型类型参数的类型? – Igor

+0

@Jakotheshadows - 它们在特定于解决方案的名称空间中,但似乎不存在无法识别类型的问题。 – bubbleking

回答

0

该视图实际上并不使用泛型类的成员,只有基因ric类。我把它当作MyViewModel工作。该视图仅使用MyViewModel属性,并且仅使JavaScript可用的IMySubViewModel(我们基本上将其内容转储到Knockout模板中)。

如果没有优势,在这种情况下使用泛型,那么我会怀疑你可以很容易地使用这个作为一种替代方案:

public MyViewModel 
{ 
    public Object KoTempModels { get; set; } 
} 

,只需与模型(一个或多个)填充KoTempModels财产你需要。

相关问题