c# - 继承和强类型 View

标签 c# asp.net-mvc inheritance razor

我有一个包含一些属性和方法的抽象类 foo。我还有许多实现 foo 的类,例如 barfoofoobar

为了在多个不同的 View 上安全地重写相同的代码,我创建了一个强类型的分部 View

@model List<foo>
@foreach (var x in Model) {
<div> x.SomeProperty </div>
}

可悲的是,当我尝试调用此 View 时

@{ Html.RenderPartial("PartialView", List<Foobar>); }

出现以下错误

传入字典的模型项的类型为 System.Collections.Generic.List1[Namespace.Models.Foobar]',但该字典需要一个类型为“System.Collections.Generic.List”的模型项1[Namespace.Models.Foo]'。

我尝试做的事情是否可行,还是我只需要复制代码?

最佳答案

完全按照您正在尝试的方式进行尝试是不可能的。如果您所做的只是枚举集合(而不是修改它),您可以更改为以下内容,应该没问题:

@model IEnumerable<foo>
@foreach (var x in Model) {
    <div> x.SomeProperty </div>
}

如果您认真考虑一下,这个问题很容易理解。

您的模型是 List<foo> .这意味着应该完全有可能说 Model.Add(new Barfoo()); .

您正在尝试传递 List<Foobar>作为模型。显然,Model.Add(new Barfoo());在那种情况下会失败,因为这是不可能的。

使用像 IEnumerable 这样的协变接口(interface)可以让您完全按照自己的需要做事。

关于c# - 继承和强类型 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6228542/

相关文章:

c# - 挣扎于 ASP.NET MVC 自动脚手架模板

python - 在 Python 3 中扩展 mp.Process

java - java中的父/子构造函数

c# - 从基类方法克隆派生类

c# - 无法引用 Microsoft.Device 命名空间

c# - 如何解决 FormFlow 中值之间的依赖冲突

c# - NHibernate 使用删除级联从父集合中删除子集合

asp.net-mvc - 如何获得物理路径的服务器路径?

c# - C#中base()的使用

asp.net-mvc - 为什么 View 和部分 View 在 Razor 中具有相同的 cshtml 文件扩展名?