我有一个抽象类foo,其中包含一些属性和方法。我也有许多实现foo的类,例如barfoo和foobar。
为了在多个不同的视图上安全地重写同一代码,我创建了一个强类型的部分视图
@model List<foo>
@foreach (var x in Model) {
<div> x.SomeProperty </div>
}
可悲的是,当我尝试使用
@{ Html.RenderPartial("PartialView", List<Foobar>); }
我收到以下错误
传递到字典中的模型项的类型为System.Collections.Generic.List
1[Namespace.Models.Foobar]', but this dictionary requires a model item of type '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这样的协变接口,您可以完全执行所需的操作。