继承在代码中首先ASP.NET MVC 4 EF5 - >获取类型

时间:2013-04-18 10:56:46

标签: inheritance asp.net-mvc-4 ef-code-first views entity-framework-5

这可能很简单,但无法弄明白。假设我有一个“Item”模型,继承的模型是“DVD”,“CD”,“GAME”,我希望能够进入Item的索引视图并获取项目类型它是。显然GetType()不会起作用。无论如何我可以这样做吗?

谢谢

3 个答案:

答案 0 :(得分:0)

GetType()不起作用吗?

我假设您从控制器传递到视图的模型是DVD,CD或游戏,但视图中声明的模型是项目?

在这个迷你程序(LinqPad - Yay)中,输出是“这是一张CD”。这不是你想要的吗?

void Main()
{
    Item cd = new CD();
    Type modelType = cd.GetType();
    if(modelType == typeof(CD)){Console.WriteLine("this is a CD");}
}

public class Item{}

public class CD: Item{}

警告:我没有在视图中对此进行测试,因为VS2012更新2刚刚杀死VS(无响应)。哼哼。

答案 1 :(得分:0)

  

你的Type是你的辨别者。

请参阅我之前的这篇文章 - Entity Framework 5 - Enum based Discriminator for derived classes

您可以使用is运算符来测试Type。

或者制作你的财产 - 如果你真的希望这样做(但我从来没有这样做过)......

public class Item
{
    [NotMapped()]
    public virtual MyEnum MyEnum { get { return MyEnum.Item; } }
}

public class DVD: Item
{
    [NotMapped()]
    public override MyEnum MyEnum { get { return MyEnum.DVD; } }
}

public class CD: Item
{
    [NotMapped()]
    public override MyEnum MyEnum { get { return MyEnum.CD; } }
}  

但我总是只做if(item is DVD)

或者.GetType().Name如果那是你真正想要的。

答案 2 :(得分:0)

对所有人来说,显然很容易 在您想要的视图中,只需写下:

@Html.DisplayTextFor(modelItem => item.GetType().Name)