所謂的viewbag是asp.net mvc3 中對viewdata 的 一種動態封裝,用法更方便。它賦值的方法:viewbag.name = 「jack」;其實viewbag[「name」] 和viewdata.name是一樣的效果,只是方法不一樣。
viewdata 是乙個特殊的字典類的名稱,我們可以用標準語法進行修改或賦值,比如:
viewdata[「name」] = 「jack」;
區別在於:用viewbag來代替viewdata使用著更快捷,但是相對於viewdata來說,viewbag還有一些不能用的地方,
viewbag 要訪問的必須是乙個有效的識別符號,否則無效,比如:viewdata[「query income」] 就不能使用viewbag 來訪問。因為「query income」中有無效的c#識別符號空格。
動態值不能作為乙個引數傳遞給擴充套件方法。因為 c#為了選擇正確的擴充套件方法規定必須標明每乙個引數的型別。如果引數中有任何乙個引數是動態的就無法通過編譯。
比如: @html.textbox(「name」,viewbag.name)就會編譯失敗。
解決方法便是 1. 將viewbag.name 替換為viewdata[「name」];
把viewbag.name 替換為乙個具體型別的引數:(string)viewbag.name;
其實在asp.net.mvc 中,頁面間和controller與view之間主要有4種小量資料傳值方式,viewdata、viewbag、tempdata、session 變數。那我們該如何使用。請看下面講解
上面的四種方法中,viewdata 和viewbag其實是一回事,viewbag其實是對viewdata的封裝,其內部其實是使用viewdata實現資料儲存的。所以我們可以將這四種方法歸為三大類,viewdata和viewbag,temdata, seesion;
**如下:
viewdata[「message」]
= 「hello asp.net mvc」;
orviewbag.message = 「helllo asp.net mvc」;
viewbag和viewdata儲存的值的什麼週期只有在從controller到view中,而tempdata中的資料不僅在從controller到vie中有效,在不同的action之間或者從乙個頁面跳轉到另乙個頁面後才有效。
session其實和viewdata型別,也是乙個string key/object value 字典陣列、但是,session是儲存在客戶端的cookies中,所以他的生命週期是最長的。但是,正因為其儲存的客戶端,所以必須確保沒有敏感機密的資訊儲存其中。
最後對每種方法進行總結:
viewdata是乙個繼承來自viewdatadictionary類的dictionary物件。
用來從controller向對應的view傳遞值。
只能在當前的請求中有效,生命週期和view相同,其值不能再多個請求中共享。
在重定向redirection後,viewdata中儲存的變數值將變為null。
在取出viewdaata中的變數值是,演示一下如何使用viewdata來從controller向view傳值。
viewbag 是乙個動態型別變數,基本是viewdata的包裝,也是用來controller向view來傳遞值的。在重定向後,viewbag中儲存的變數值將變為null,因為viewbag是動態型別,所以我們在取得其值時,不需要進行型別轉換。
tempdata 是乙個繼承tempdatadictionary類的字典物件,它預設情況下是基於session儲存機制之上的。用來在多個action是或當期請求向子請求,頁面傳送重定向時傳遞共享資料。只有在目標檢視完全載入才有效,在取出tempdata儲存的變數值時,必須進行合適的型別裝換和空值檢查。
session也是asp.net.mvc程式傳遞值的一種方式但與tempdata不同,使用者的整個會話中session都不會過期,在同一使用者會話的過程中所以請求中有效,比如:重新整理頁面,當中的值也需要進行型別轉換和非空檢查。
ViewBag的區別和使用
viewbag 和viewdata的區別 viewbag 它是 dynamic 型別對像,asp.net mvc3 才有,基於asp.net 4.0與.net framework,viewbag 比viewdata慢,在viewpage中查詢資料時不需要型別轉換,viewdata 它是key val...
ViewBag和ViewData的使用
使用viewbag和viewdata分別向檢視頁面各傳遞乙個字串型別的值 var list db.students var loginname loginname viewdata loginname loginname 將變數的值放入到viewdata中,viewdata是以鍵值對 viewbag...
ViewBag和ViewData的用法和區別
viewbag和viewdata的用法和區別 一 viewbag的定義 public dynamic viewbag return dynamicviewdata 二 viewdata的定義 public viewdatadictionary viewdata return viewdata set...