Asp.net MVC中ViewData與ViewBag的使用方法
在做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”])
五、簡單總結
遇到未知的東西不要著急,現在每天有那麼多新知識面世,沒有人能記住所有的知識點,只要能靜下心來認真研究總能學會的,一定要相信自己能行,不要對自己設限。
相關文章
- ASP.NET 5與MVC 6中的新特性ASP.NETMVC
- [MVC]通過ViewData傳遞列表給JavaScript陣列MVCViewJavaScript陣列
- ViewData的使用View
- ASP.NET MVC與ASP.NET WebFormASP.NETMVCWebORM
- Asp.Net MVC 中的 Cookie(譯)ASP.NETMVCCookie
- ASP.Net MVC與WebForm的區別ASP.NETMVCWebORM
- asp.net mvc 中的部分檢視ASP.NETMVC
- asp.net mvc 之旅 —— 第五站 從原始碼中分析asp.net mvc 中的TempDataASP.NETMVC原始碼
- ASP.NET MVC中簡單使用AutofacASP.NETMVC
- ASP.NET:MVC中檔案上傳與地址變化處理ASP.NETMVC
- ASP.NET MVC中URL末尾斜槓的實現ASP.NETMVC
- Asp.net中UpdatePanel內FileUpload的正確使用方法ASP.NET
- ASP.NET Core 5.0 MVC中的 Razor 頁面 介紹ASP.NETMVC
- 讀取ViewBag匿名類View
- ASP.NET MVC路由ASP.NETMVC路由
- ASP.NET MVC ModuleASP.NETMVC
- ASP.NET MVC TemplateASP.NETMVC
- ASP.NET MVC ErrorASP.NETMVCError
- ASP.NET MVC FilterASP.NETMVCFilter
- UpdatePanel for ASP.NET MVCASP.NETMVC
- ASP.NET Core MVC 中的 [Controller] 和 [NonController]ASP.NETMVCController
- ASP.NET MVC4中呼叫WEB API的四個方法ASP.NETMVCWebAPI
- ASP.NET MVC - PageData的應用ASP.NETMVC
- 【備忘】ASP.NET MVC 5 升級到 ASP.NET Core MVC 的部分變化ASP.NETMVC
- [ASP.NET MVC 小牛之路]01 - 理解MVC模式ASP.NETMVC模式
- 深入理解 MVC 中的 M 與 CMVC
- 在Asp.net MVC中訪問靜態頁面ASP.NETMVC
- Asp.Net MVC HttpPost用法ASP.NETMVCHTTP
- ASP.NET MVC 反射例子ASP.NETMVC反射
- Asp.Net MVC 快取ASP.NETMVC快取
- Asp.Net MVC 使用 AjaxASP.NETMVC
- ASP.NET MVC ValidationASP.NETMVC
- ASP.NET MVC: Membership, OAuthASP.NETMVCOAuth
- ASP.NET MVC系列:AreaASP.NETMVC
- ASP.NET MVC系列:ModelASP.NETMVC
- AJAX Panels with ASP.NET MVCASP.NETMVC
- ASP.NET MVC 之 AJAXASP.NETMVC
- ASP.NET MVC和AJAXASP.NETMVC