Asp.net MVC中ViewData與ViewBag的使用方法

來源:互聯網
上載者:User

在做MVC開發時經常會用到ViewData和ViewBag進行傳值操作,因為很常用所以在這裡總結一下,以方便後來人。 一、ViewBag的使用方法

後台代碼:

public ActionResult Index(){    Dictionary<string, string> address = new Dictionary<string, string>();    address.Add("Lng", "12.353535");    address.Add("Lat", "28.262626");    address.Add("Location", "唐寧街十號");    List<string> modules = new List<string>();    modules.Add("Admin module");    modules.Add("Recursive module");    modules.Add("Consistent module");    ViewBag.Name = "蟈蟈";    ViewBag.Age = "18";    ViewBag.Phone = "18233199999";    ViewBag.Address = address;    ViewBag.Modules = modules;    return View();}

前台代碼:
後台用ViewBag存值,前台既可以通過ViewBag取值,也可以通過ViewData取值。使用ViewData取值時,必須將資料轉換成合適的類型;使用ViewBag取值時不需要轉換資料類型。

@ViewData["Name"]@ViewData["Age"]@ViewData["Phone"]@{    Dictionary<string, string> dict = ViewData["Address"] as Dictionary<string, string>;}@if (dict != null){    @dict["Lng"]    @dict["Lat"]    @dict["Location"]}@{    List<string> list = ViewData["Modules"] as List<string>;}@if (list != null){    @list[0]    @list[1]    @list[2]    }<br/>@ViewBag.Name@ViewBag.Age@ViewBag.Phone@ViewBag.Address@ViewBag.Address["Lng"]@ViewBag.Address["Lat"]@ViewBag.Address["Location"]@ViewBag.Modules@ViewBag.Modules[0]@ViewBag.Modules[1]@ViewBag.Modules[2]
二、ViewData的使用方法

後台代碼:

public ActionResult Index(){    Dictionary<string, string> address = new Dictionary<string, string>();    address.Add("Lng", "12.353535");    address.Add("Lat", "28.262626");    address.Add("Location", "唐寧街十號");    List<string> modules = new List<string>();    modules.Add("Admin module");    modules.Add("Recursive module");    modules.Add("Consistent module");    ViewData["Name"] = "蟈蟈";    ViewData["Age"] = "18";    ViewData["Phone"] = "18233199999";    ViewData["Address"]=address;    ViewData["Modules"] = modules;    return View();}

前台代碼:
後台用ViewData存值,前台既可以通過ViewBag取值,也可以通過ViewData取值。使用ViewData取值時,必須將資料轉換成合適的類型;使用ViewBag取值時不需要轉換資料類型。

@ViewData["Name"]@ViewData["Age"]@ViewData["Phone"]@{    Dictionary<string, string> dict = ViewData["Address"] as Dictionary<string, string>;}@if (dict != null){    @dict["Lng"]    @dict["Lat"]    @dict["Location"]}@{    List<string> list = ViewData["Modules"] as List<string>;}@if (list != null){    @list[0]    @list[1]    @list[2]    }<br/>@ViewBag.Name@ViewBag.Age@ViewBag.Phone@ViewBag.Address@ViewBag.Address["Lng"]@ViewBag.Address["Lat"]@ViewBag.Address["Location"]@ViewBag.Modules@ViewBag.Modules[0]@ViewBag.Modules[1]@ViewBag.Modules[2]
三、兩者的定義

ViewBag的定義:

public dynamic ViewBag {      get {          if (_dynamicViewData == null) {              _dynamicViewData = new DynamicViewDataDictionary(() => ViewData);          }          return _dynamicViewData;      }  }

ViewData的定義:

public ViewDataDictionary ViewData {      get {          if (_viewData == null) {              SetViewData(new ViewDataDictionary());          }          return _viewData;      }      set {          SetViewData(value);      }  }

通過定義我們可以看出ViewBag是ViewData的動態封裝器,相當於在ViewData的基礎上進行了封裝處理。 四、兩者的區別 ViewData是字典類型,賦值方式用字典方式,通過key值讀取對應的value,ViewData[“myName”] ViewBag是動態類型,使用時直接通過屬性賦值即可,ViewBag.myName ViewData和ViewBag只在當前Action中有效,等同於View

ViewData和ViewBag中的值可以互相訪問

注意:
1、只有當關鍵字是有效C#標識符時,ViewBag才起作用。
例如:如果在ViewData[“Key With Space”]中存放一個值,那麼就不能使用ViewBag訪問,因為這樣根本無法通過編譯。
2、動態值不能作為一個參數傳遞給擴充方法,因為C#編譯器為了選擇正確的擴充方法,在編譯時間必須知道每一個參數的真正類型。如果其中任何一個參數是動態,那麼就不會通過編譯。
例如:@Html.TextBox(“name”,ViewBag.Name) 就會編譯失敗。
要使這行代碼通過編譯有兩種方法: @Html.TextBox(“name”,(string)ViewBag.Name) 、@Html.TextBox(“name”,ViewData[“Name”]) 五、簡單總結

遇到未知的東西不要著急,現在每天有那麼多新知識面世,沒有人能記住所有的知識點,只要能靜下心來認真研究總能學會的,一定要相信自己能行,不要對自己設限。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.