这可能很简单,但无法弄清楚。假设我有一个“项目”模型,并且从该模型继承的模型是“DVD”、“CD”、“游戏”,例如,我希望能够进入项目的索引视图并获取项目的类型这是。显然 GetType() 是行不通的。无论如何我可以做到这一点?
谢谢
这可能很简单,但无法弄清楚。假设我有一个“项目”模型,并且从该模型继承的模型是“DVD”、“CD”、“游戏”,例如,我希望能够进入项目的索引视图并获取项目的类型这是。显然 GetType() 是行不通的。无论如何我可以做到这一点?
谢谢
你
Type
是你的歧视者。
请参阅我之前的这篇文章 -实体框架 5 - 派生类的基于枚举的鉴别器
您可以使用is
运算符来测试类型。
或者让你的财产 - 如果你真的想这样做(但我从来没有需要)......
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
如果那是你真正想要的。
GetType() 不起作用吗?
我假设您从控制器传递到视图的模型是 DVD、CD 或游戏,但视图中声明的模型是 Item?
在这个小程序(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(无响应)。哼哼。
对的每个人,显然很容易在你想要的任何地方,只要写:
@Html.DisplayTextFor(modelItem => item.GetType().Name)