我有一个包含一些属性和方法的抽象类 foo。我还有许多实现 foo 的类,例如 barfoo 和 foobar。
为了在多个不同的 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/