2010-08-26 28 views
2

在我的理解中,ViewModel模式被設計爲將所有相關數據傳遞給View,因爲1)視圖不應該執行任何數據檢索或應用程序邏輯,2)它使類型安全,編譯時檢查和編輯器視圖模板內的智能感知。新的ViewModel不會過時ASP.NET MVC 3中的ViewModel模式,對嗎?

由於動態表達式是在運行時定義的,這是否意味着我們沒有得到任何2)的好東西?

回答

3

您不會失去任何現有的功能。你仍然可以擁有一個強類型的視圖,當你訪問Model屬性時,它將是你指定的類型。唯一添加的是訪問ViewData字典中項目的較短方式。

取而代之的是以下

ViewData["MyData"] 

你可以有

View.MyData 

注意,因爲你從來沒有真正有過任何不丟失任何類型的安全。在前一種情況下,鍵是一個字符串(不能確定它存在於字典中),並且該值是一個對象,所以除非你施放它,否則你不能用它做很多事情。在後者中,您也不會獲得智能感知,並且必須將返回值轉換爲有用的東西。

實際上,View.MyData的實現只是使用屬性名稱(「MyData」)並返回來自ViewData字典的值。

可以說,你失去的一件事就是能夠在你的密鑰名稱中有空格或其他字符不是合法的C#標識符。

+0

是的,這是我正在辯論,這證實了我的疑惑。 – randomguy 2010-08-26 00:43:18