0

这可能很简单,但无法弄清楚。假设我有一个“项目”模型,并且从该模型继承的模型是“DVD”、“CD”、“游戏”,例如,我希望能够进入项目的索引视图并获取项目的类型这是。显然 GetType() 是行不通的。无论如何我可以做到这一点?

谢谢

4

3 回答 3

0

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如果那是你真正想要的。

于 2013-04-18T11:52:14.793 回答
0

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(无响应)。哼哼。

于 2013-04-18T11:13:19.890 回答
0

对的每个人,显然很容易在你想要的任何地方,只要写:

@Html.DisplayTextFor(modelItem => item.GetType().Name)
于 2013-04-19T09:21:47.177 回答