在cnblogs 找到了一篇有用的文章,大家一起來學習一下。 asp.net MVC3 增加了一個Razor視圖引擎,@表達式 就是最新的也是最快的表達方式 在這里需要注意ViewBag 和ViewData的不同,其實從本質上說這兩個屬性都是可以進行數據傳遞,但是也有一些區(qū)別和聯(lián)系。
首先,ViewBag是dynamic類型的,是動態(tài)類型的也就是說是在程序運行的時候動態(tài)確定的類型,而ViewData則是ViewDataDictionary類型的,這是區(qū)別1. 其次,ViewBag是通過ViewBag.Message=’Some Content’ ; 這樣的方式來進行賦值存取的,而ViewData[“Message”]=”Some Content”; 是通過Key 和Value 來進行存取的這是區(qū)別2 最后,ViewBag 和ViewData 我說本質上沒有什么不同,是說ViewBag 可以和ViewData 進行數據的交換獲取。這句話很拗口,我舉個例子來說,ViewBag.Message=’Some Content’; ViewData[“Message”]=”Some Content 2”; 如果在前臺View頁面通過 ViewBag.Message 和ViewData[“Message”] 分別顯示的話,其實顯示的是同一個內容,都是Some Content2
這是什么原因呢?其實ViewBag 在內部實現(xiàn)上使用了ViewData,所以導致ViewBag 和ViewData 可以互相存取。還有另外一個例子表示,ViewBag.Message=”guo”; ViewData[“Content”]=”zhi”; 如果在View中 可以通過ViewData[“Message”] 來獲取 為 guo ,也可以 用 ViewBag.Content 來獲取ViewData中的數據 顯示為zhi。 這就表示ViewData 和ViewBag 可以互相存取。不知道我說的夠不夠清楚呢!不信的話,你可以自己試試奧。 還有一個重要的問題就是 ,不可以直接瀏覽Views文件夾下的View文件,必須通過Controller來進行訪問,這個不同于asp.net Web form 或者是php。至于什么原因,我相信只要是學習過MVC的朋友,都會懂得。
|