2009-06-17 80 views
8

我一直在閱讀專業ASP.NET MVC 1.0書籍,以及閱讀其他來源談論使用ViewModel而不是從您的控制器內的ViewData視圖。但是後來我看到很多ViewData的例子被用在那些艱難的情況下,在沒有其他方式的情況下,只能從ViewData中獲取某些東西。但後來我讀了一本像Pro ASP.NET MVC Framework的書,他所談論的只是ViewData,與ViewModel無關。那麼ViewModel是一個非常新的概念還是什麼?要使用ViewData或不使用ViewData

我看到ViewModel是一個更好的方法,但它是一個堅實的選擇?我的意思是ViewData很容易在其他之類的東西中使用,例如ViewModel不支持的HtmlHelper對象。或者例如在自定義控件中使用它(http://www.codeproject.com/KB/custom-controls/MVCCustomControls.aspx)。那麼,我是否會根據不同的目標或者什麼使用兩者的組合?如果我想在任何原因下訪問我的擴展方法中的ViewModel,該怎麼辦?我在這裏失去了要走的路。我知道ViewData不是強類型的,但你可以設置你的視圖來指定類型,因此使你的ViewData類型,但我只是想知道。對ViewData有如此多的支持,但我知道ViewModel是一種更加抽象和分離的方式,以及它被輸入的方式。我只是不想在需要獲取某些數據的場景中縮短自己,例如可以從其他對象(如HtmlHelper類)輕鬆訪問的ViewData。

想法?標準是什麼?經驗?我關了一下,還是隻是使用組合,在其他情況下仍然使用ViewData,而不僅僅是將數據從Controller發送到View或什麼?

,如果你是不是在所有使用的ViewData,而是使用視圖模型與你的控制器,這似乎是在一個全有或全無您使用視圖模型,因此ViewData的沒有目的,因爲你還沒有與任何設置在從你的控制器,所以它在這一點上沒有用處?我在這裏困惑任何人或方式?當然,把自己搞糊塗了。

回答

2

那麼,ViewData是一個非常快速的實現方法。然而,你在做大量的字符串字面傳遞,這通常不是一件好事。你可以通過使用一些字符串常量來解決這個問題,這就是我對Session變量所做的事情,但我認爲在這裏ViewModel是一個更好的方法。任何時候你可以使用ViewData,你也可以使用ViewModel。 ViewModel不一定只是你的域對象;它可能是一個助手類,它不僅有一個域對象,而且還有一些特定於視圖的額外屬性;這就是爲什麼它在那裏。因此,使用ViewModel,編譯器可以幫助您從面向對象的角度明確地幫助您,而且它不僅僅是將密鑰傳遞到字典中,而是更加清晰。

我認爲MVC在這裏提供了一個很好的方法。它爲那些需要「完成它」和更簡潔的方法的人提供了快速和骯髒(不一定是壞事),而且這兩種方法都非常易於使用。

如果您還沒有閱讀Scott Gurthie的ASP.NET MVC教程;我強烈建議:

http://weblogs.asp.net/scottgu/archive/2009/04/28/free-asp-net-mvc-nerddinner-tutorial-now-in-html.aspx

+0

我不是在談論ViewData.Model。我正在討論在視圖和控制器「視圖模型」之間存在的額外層類,它們負責從模型中獲取特定對象,以便控制器可以使用它們而不是控制器從模型層抓取項目。 – PositiveGuy 2009-06-17 13:45:48