ViewModel、ViewData、ViewBag、TempData、Session In MVC 對比

来源:互联网 发布:ubuntu 断电无法启动 编辑:程序博客网 时间:2024/06/10 15:36

ViewModel、ViewData、ViewBag、TempData、Session In MVC

ViewModel

ASP.NET MVC 中 ViewModel 是強類型類。
ViewModel 是數據模型和視圖之間的橋樑。
ViewModel 在控制器中被填充數據之後被傳遞給視圖模板以在視圖中呈現。
ViewModel 中擁有所有的數據驗證規則。

ViewData

ViewData 是派生自 System.Web.Mvc.ViewDataDictionary 的無類型的鍵-值字典。(un-typed key-value dictionary)
數據以 key-value 成對的形式存儲於 ViewData 中。
ViewData 被用於在控制器和視圖之間傳遞數據。
ViewData 的壽命只限於當前請求。ViewData 的生命週期開始於‘控制器’,終止於‘視圖’渲染結束。

// Populating ViewData in Controllerpublic ActionResult Index(){    ViewData["SomeKey"] = "Some Data";    return View();}// Retriving ViewData value in the view@ViewData["SomeKey"].ToString()

ViewBag

ViewBag 是動態對象,它是對 ViewData 的一個包裝。
ViewBag 派生自 System.Web.Mvc.ControllerBase.ViewBag
由於 ViewBag 是動態對象,它其中不能含有任何預定義的屬性。
ViewBag 的壽命只限於當前請求。ViewBag 的生命週期開始於‘控制器’,終止於‘視圖’渲染結束。

// Populating ViewBag in Controllerpublic ActionResult Index(){    ViewBag.SomeProperty = "Some Value";    return View();}// Retriving ViewBag value in the view@ViewBag.SomeProperty.ToString()

TempData

TempData 對象派生自 System.Web.Mvc.TempDataDictionary
TempData 無類型的鍵-值字典對象。(un-typed key-value pair dictionary object)
TempData 的生命週期從一個請求跨越到另一個請求。例如:只有呼叫從一個動作方法重定向至另一個動作方法時,數據才會持續存在,並且此對象在重定向動作方法中被使用之後會自動銷毀。
TempData 的通常用途是:在動作方法之間存儲傳遞小數據。例如:一個動作向另一個動作傳遞錯誤訊息。
若想在首次重定向的動作中保持 TempData ,使用 TempData.Keep() 方法為將來的重定向動作記住此數據。
TempData 在 ASP.NET Session 中存儲它的目錄。所以在使用 TempData 時需要小心注意。如同 Session 一樣,在服務器集群環境中 TempData 可能會製造麻煩。

// Populating TempData in Controllerpublic ActionResult Index(){    TempData["ErrorMsg"] = "Some Error Here";    return RedirectToAction("Error");}// Retriving TempData value in redirected action methodpublic ActionResult Error() {         var msg = TempData["ErrorMsg"];    // Do Something}

Session

Session 是派生自 System.Web.SessionState 的鍵-值對象。
Session 被用於跨越控制器傳遞數據。
Session 的生命週期一直持續到以下情況時,Session 才會被銷毀(超時、清除、移除全部、拋棄方法、用戶關閉瀏覽器)。
盡量減少對 Session 的使用,在服務器集群環境中 Session 是不可靠的。

// Populating sessionpublic ActionResult Index(){    Session["SomeKey"] = "Some Value";    return RedirectToAction("Error");}// Retriving session value public ActionResult Error() {         var msg = Session["SomeKey"];    // Do Something}
阅读全文
0 0
原创粉丝点击