如何将子对象发送到父对象列表中的MVC视图

时间:2013-04-23 01:06:32

标签: c# model-view-controller inheritance collections

说我有这些课程:

public class Animal
{

}

public class Elephant : Animal
{
  public string Name { get; set; }
}

我有一个控制器方法

    public SubmitElephants()
{
    var elephants = new List<Animal>();

    elephants.Add(new Elephant { Name = "Timmy" };
    elephants.Add(new Elephant { Name = "Michael" };

return View("DisplayElephants", elephants);

}

DisplayElephants视图如下所示:

@model IList<Elephant>

@foreach(var elephant in Model)
{
  <div>@elephant.Name</div>
}

因此,如果我运行此代码,我将收到错误:

传递到字典中的模型项的类型为'System.Collections.Generic.List 1[Animal]', but this dictionary requires a model item of type 'System.Collections.Generic.IList 1 [Elephant]'

所以不,我不想将我的列表更改为var elephants = new List<Elephant>();

我想知道的是因为我有一个我知道的动物列表只包含大象我怎样才能从控制器传递到一个特定于大象的视图?

2 个答案:

答案 0 :(得分:1)

AFAIK这是不可能的。在某种意义上,你所尝试的是与协方差相反的。

This article描述了协方差和逆变。

总之,你可以这样做 -

IEnumerable<Elephant> elephants = new List<Elephant>();
IEnumerable<Animal> animals = elephants;

你实际上想要反过来。

另请注意,并非所有通用集合都是协变的。 This article告诉我们C#中协变的集合。

答案 1 :(得分:0)

更改此行:

var elephants = new List<Animal>();

为:

var elephants = new List<Elephant>();

有关原因的更多信息,请参阅@ Srikanth的回答。