【问题标题】:Inheritance In code first ASP.NET MVC 4 EF5 -> Get type在代码中继承 ASP.NET MVC 4 EF5 -> 获取类型
【发布时间】:2013-04-18 10:56:46
【问题描述】:

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 不,它给出了完整路径,但为项目。我只需要在我使用的视图中检测“描述符”或类型的东西。如果我在其他地方写一个方法,它会在哪里以及如何写?只需要数据库中该项目的模型名称
    【解决方案2】:

    您的Type 是您的鉴别器。

    查看我之前的这篇文章 - Entity Framework 5 - Enum based Discriminator for derived classes

    您可以使用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

    【讨论】:

    • 感谢您提供的链接,但是如果(实体是 MyBaseClass)或 .OfType();选项,如果我想在索引视图中获取我的类型,我应该把它们放在哪里。谢谢
    • 您的视图与您的模型相关联 - 即例如DVD - 你有你需要的一切。我发布了更多代码 - 取决于您想要做什么。编辑您的问题以添加 MVC 视图代码 - 您在哪里卡住了
    • 您可能需要重新学习 MVC 编码技术,我相信这就是困扰您的地方。看看如何在视图中并根据您拥有的模型进行常规编码。
    【解决方案3】:

    每个人都对,显然很容易 在任何你想要的视图中,只需写:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      相关资源
      最近更新 更多