2012-11-28 107 views
0

如何從控制器中查找(剃鬚刀)視圖的模型類型?我知道他們從WebViewPage和WebViewPage繼承,就是這樣。查找強類型剃刀視圖(或任何視圖)的模型類型

(在asp.net C#MVC 3或4)預先

感謝。

編輯用例: 允許用戶創建/上傳/編輯視圖和強類型視圖,然後用戶可以選擇其中一個用戶創建視圖來顯示/編輯數據庫中不同類型的數據。

因此,例如,應用程序檢索對象Foo,並有Boo和Foo強類型的視圖。我不希望Boo的視圖顯示爲Foo對象的可能選擇。

+0

如果你這樣做,你需要知道,允許用戶上載的安全問題和在您的服務器上運行任意代碼。 – Joe

+0

嗨,我很清楚。這不是一個「公衆上傳」,而是一個內部流程,利益相關方與內部開發人員一起工作,爲內容管理者提供可供選擇的觀點。感謝您的關注。 –

回答

1

我不知道你爲什麼會想這樣做,但你可以只是做

@Model.GetType() 

你應該儘量避免在您的視圖儘可能多的代碼和推動邏輯到您的控制器或服務。

+0

更新的問題。我想要做的是允許用戶將不同的視圖關聯到一個對象。但是,我不希望它們將視圖關聯到沒有正確模型類型的對象。 –

+0

你爲什麼這樣做?爲什麼你不能說類似...'if(type)return View(「typeView」,obj);否則返回View(obj);'也許你可以提供一個更好的例子嗎? –

+0

增加了一個用戶案例。 –

0

如果你有機會獲得一個IEnumerable<WebViewPage<T>>,您可以通過執行獲得的T類型如下:

// Assuming 'views' is a IEnumerable<WebViewPage<T>> here. 
var validFooViews = views.Where(v => 
    v.GetType().GetGenericArguments()[0] == typeof(Foo)); 
+0

謝謝,但我在哪裏可以得到「views.Where(v => ....」 –

+0

在你的問題你提到,用戶可以從用戶創建的視圖列表中選擇,所以我假設你可以訪問這些數據,在我的例子中,我簡單地假設'views'是代碼中其他地方定義的'IEnumerable >' – Jordan

+0

不幸的是,情況並非如此,視圖被開發者上傳和部署CSHTML。 –