0

這可能很簡單,但無法弄清楚。假設我有一個「Item」模型,並且從它繼承的模型是「DVD」,「CD」,「GAME」,例如,我希望能夠進入Item的索引視圖並獲取項目的類型它是。顯然,GetType()不會起作用。無論如何,我可以做到這一點?繼承在代碼中第一個ASP.NET MVC 4 EF5 - >獲取類型

謝謝

回答

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(不響應)。何哼。

+0

不,它給出了完整的路徑,但項目。我只是需要一些東西,我認爲我使用的是檢測「descriminator」或類型。如果我寫了一個方法,那麼它會在哪裏,它將如何寫?只需要數據庫中該項目的型號名稱 – user1290653

0

您的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

+0

感謝您的鏈接,但我如何做最後一個if(實體是MyBaseClass)或.OfType ();選項,如果我想在索引視圖中獲得我的類型,我在哪裏放置它們。謝謝 – user1290653

+0

您的觀點與您的模型相關 - 即例如DVD - 你有你需要的一切。我發佈了一些更多的代碼 - 取決於你想要做什麼。編輯你的問題以添加MVC視圖代碼 - 你在哪裏被卡住 – NSGaga

+0

你可能需要重新學習MVC編碼技術,我相信這就是困擾你的東西。看看如何在視圖中進行常用編碼,並基於您擁有的模型。 – NSGaga

0

人人有權,容易顯然 在任何你想去的地方看,這樣寫:

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