控制器傳給視圖
一、ViewDataweb
定義:表示一個容器,該容器用於在控制器和視圖之間傳遞數據。他是一個字典。ajax
後臺聲明:ViewData["User"]=1;json
頁面訪問:@ViewData["User"]session
二、ViewBagmvc
定義:dynamic動態類型,它會在程序運行的時候動態解析。asp.net
本質:ViewBag其實本質就是ViewData,只是多了層Dynamic控制(致使同名的會覆蓋掉。並且viewdata能夠訪問到viewbage中的數據)。因此,使用何種方式徹底取決於你的我的愛好。viewdata比viewbag快spa
聲明週期:ViewBag和ViewData僅針對當前Action中有效,生命週期和view相同。.net
後臺聲明:ViewBag.User=1;orm
頁面訪問:@ViewBag.User或者@ViewData["User"]blog
上圖中先添加一個viewdadta["User"],而後又添加一個viewbag.User。就會產生一個問題,viewbag.User會覆蓋掉viewdadta["User"]
三、TempData
定義:表示僅從一個請求保持到下一個請求的數據集。它也是一個字典。
本質:保存在session中,Controller每次執行請求時,會從session中獲取tempdata,然後清空session,獲取完tempdata數據,雖然保存在內部字典中。可是字典中每一個條目訪問一次後就從字典中刪除。每一個元素
最多隻能訪問一次,以後刪除。(不建議使用,這個webform裏面經過session傳值有什麼區別?)
他能夠跨Action傳遞,好比說,第一個action定義一個TempData,可是他的對應view沒有使用它(由於使用了會消失),在打開另一個view,另一個view還會訪問到這個TempData。
後臺聲明:TempData["User"]=1;
頁面訪問:@TempData["User"]
四、return View(new VerifyCodeViewModel());這種更能夠表現MVC的特色。
後臺聲明:return View(new VerifyCodeViewModel());
頁面訪問:
制定類型 @model WebApplication14.Models.VerifyCodeViewModel
訪問模型中的值 @Model.屬性
在類型轉換的時候,能夠再頁面上寫後臺代碼聲明變量,這樣下面要是有多個訪問的時候就只須要轉化一次。(viewbage是不須要轉化的,由於本身會轉換,裏面用的是反射。因此效率低)
return view也能夠指定返回的視圖。其實asp.net中的mvc最大的特色就是1:約定俗稱,可是也能夠用戶本身配置修改(約定大於配置)。2:擴展性
總結:
一、ViewData和TempData是字典類型,賦值方式用字典方式,ViewData["myName"]
二、ViewBag是動態類型,使用時直接添加屬性賦值便可 ViewBag.myName
三、ViewBag和ViewData只在當前Action中有效,等同於View
四、TempData能夠經過轉向繼續使用,由於它的值保存在Session中。但TempData只能通過一次傳遞,以後會被系統自動清除
五、ViewData和ViewBag中的值能夠互相訪問,由於ViewBag的實現中包含了ViewData
視圖傳給控制器
表單提交數據給action,會自動模型綁定。
ajax調用 數據格式json action也會自動模型綁定。