MVC-傳值

控制器傳給視圖

一、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也會自動模型綁定。

相關文章
相關標籤/搜索