【发布时间】:2016-09-22 17:49:54
【问题描述】:
我正在尝试重构视图和模型。以前,强类型视图在 CSHTML 文件中有这个模型指令:
@model MyViewModel<MySubViewModel>
我已经确定类型 MySubViewModel 需要是通用的或可继承的,因为我已经确定了多种应该可以在这里互换的类型。
首先我尝试了这个:
@model MyViewModel<T>
...我做不到,所以,一厢情愿,我尝试了这个:
@model MyViewModel<T> where T : IMySubViewModel
...这也不好,所以我终于尝试了这个:
@model MyViewModel<IMySubViewModel>
...起初我认为这是有效的,因为 Visual Studio 没有强调它。但是,我很快看到我插入 Razor 的每个地方都显示为错误消息“当前上下文中不存在名称 'Whatever'”。这适用于 ViewBag、Html 助手和我的视图模型的所有用法。
那么这应该怎么做呢?还是不能做?我意识到我可能会使用:
@model MyViewModel<dynamic>
...但我宁愿不要失去 Intellisense,因为我知道“动态”类型将始终是实现 IMySubViewModel 的东西。
【问题讨论】:
-
MyViewModel 和 IMySubViewModel 来自哪些命名空间?
-
我很惊讶
@model MyViewModel<IMySubViewModel>没用。我假设MyViewModel被定义为泛型类型,并且没有限制可以防止接口IMySubViewModel用作泛型类型参数的类型? -
@Jakotheshadows - 它们位于特定于解决方案的命名空间中,但类型无法识别似乎没有问题。
-
@bubbleking 看看这是否有帮助:stackoverflow.com/questions/29319189/…?您在回答中没有提到任何关于尝试过组件缓存的内容,所以我会尝试一下以防万一。
标签: c# asp.net asp.net-mvc razor