我有一个抽象类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这样的协变接口,您可以完全执行所需的操作。

08-18 12:25
查看更多