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