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