這可能很簡單,但無法弄清楚。假設我有一個「Item」模型,並且從它繼承的模型是「DVD」,「CD」,「GAME」,例如,我希望能夠進入Item的索引視圖並獲取項目的類型它是。顯然,GetType()不會起作用。無論如何,我可以做到這一點?繼承在代碼中第一個ASP.NET MVC 4 EF5 - >獲取類型
謝謝
這可能很簡單,但無法弄清楚。假設我有一個「Item」模型,並且從它繼承的模型是「DVD」,「CD」,「GAME」,例如,我希望能夠進入Item的索引視圖並獲取項目的類型它是。顯然,GetType()不會起作用。無論如何,我可以做到這一點?繼承在代碼中第一個ASP.NET MVC 4 EF5 - >獲取類型
謝謝
不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(不響應)。何哼。
您的
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
。
感謝您的鏈接,但我如何做最後一個if(實體是MyBaseClass)或.OfType
您的觀點與您的模型相關 - 即例如DVD - 你有你需要的一切。我發佈了一些更多的代碼 - 取決於你想要做什麼。編輯你的問題以添加MVC視圖代碼 - 你在哪裏被卡住 – NSGaga
你可能需要重新學習MVC編碼技術,我相信這就是困擾你的東西。看看如何在視圖中進行常用編碼,並基於您擁有的模型。 – NSGaga
人人有權,容易顯然 在任何你想去的地方看,這樣寫:
@Html.DisplayTextFor(modelItem => item.GetType().Name)
不,它給出了完整的路徑,但項目。我只是需要一些東西,我認爲我使用的是檢測「descriminator」或類型。如果我寫了一個方法,那麼它會在哪裏,它將如何寫?只需要數據庫中該項目的型號名稱 – user1290653