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