ASP.NET MVC ViewData 與 TempData 的差別
- 2009-06-21
- 25219
- 0
在 ASP.NET MVC 下傳遞資料的方式 demo 一直都使用ViewData,甚至有到ViewData無敵用的境界,之前就知道還有一個 TempData 但也沒啥注意它,剛好今天下午在看文章的時候晃到有網友介紹了 TempData 就仔細看一下,哎呀!!發現了新大陸。
對於ViewData demo 就不贅述了來針對 TempData吧,TempData 是一個字典,很像不具型別的 ViewData。不過,TempData 的內容只會在單一要求中存活,之後就會刪除。這相當適合用來作錯誤訊息的傳送。
之前,demo想要作表單的後端驗證不是在 Controller 中直接丟出 Java Script 告知使用者驗證失敗還是新增資料成功的 Alert 語法,後來進階一點改使用 ViewData 傳送但還要作處理相當麻煩,因此建議使用TempData。
很簡單的範例一看你就懂啦在 View上加一個
<%=TempData["error"] %>
Controller 就大約這樣寫
public ActionResult Contact() { return View(); } [AcceptVerbs(HttpVerbs.Post)] public ActionResult Contact(string title) { if (string.IsNullOrEmpty(title)) { TempData["error"]= "標題沒有輸入"; return RedirectToAction("Contact"); } return View(); }
當使用者沒有輸入標題的時候我們就給予 TempData["error"] 錯誤訊息然後返回 Contact ,因為我們在 View 內有加上剛剛那段,所以錯誤訊息就會丟過去啦,相當的好用。
上述寫法當然是很爛,如果要使用應該是要改為可以傳送多筆的功能,比如使用List<string>來丟。
- http://msdn.microsoft.com/zh-tw/magazine/cc337884.aspx
(有個範例說明使用方式,建議有玩MVC的一定要看過這篇) - http://www.squaredroot.com/2007/12/20/MVC-ViewData-vs-TempData/
(解釋了TempData的底層有興趣的可以看一下)
回應討論