demoshop

demo, trying to be the best_

在 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>來丟。

  1. http://msdn.microsoft.com/zh-tw/magazine/cc337884.aspx
    (有個範例說明使用方式,建議有玩MVC的一定要看過這篇)
  2. http://www.squaredroot.com/2007/12/20/MVC-ViewData-vs-TempData/
    (解釋了TempData的底層有興趣的可以看一下)

 

回應討論