2013年5月28日 星期二

[Asp.net MVC] TempData、ViewData、ViewBag

若要將資料從後端Controller傳遞到View,除了使用ViewModel以外,最常見的就是底下三種:

1.ViewData
存放在物件中,生命週期為一個頁面。
Controller :
 public ActionResult Index()
        {
            ViewData["message"] = "訊息";
            return View();
        }
View :
@ViewData["message"]
2.ViewBag
這是MVC 3 之後新增的,使用方式和ViewData一樣,差別在於ViewBag 使用 dynamic 型別,可免去手動轉型的麻煩,使用上較為方便,但也因為動態型別關係,速度上會略比ViewData來的慢(人體無感吧@@)。
Controller :
 public ActionResult Index()
        {
            ViewBag.message = "訊息";
            return View();
        }
View :
@ViewBag.message
3.Temp Data
資料會儲存在Session 中,其生命週期為一個 Request,一旦Request結束就會被刪除。 因此我們可善用此特性讓資料跨不同Action傳遞至View,如RedirectToAction 中作使用,範例如下:




Controller :
        public ActionResult Index()
        {
            TempData["status"] = "我是從index送過來的!";
            return RedirectToAction("about");
        }

        public ActionResult about()
        {
            return View();
        }
View :

TempData :

@TempData["status"]
我們在Index Action 中使用了 RedirectToAction("about"),最後回傳 about.cshtml 這個View

為了證實TempData僅存活在一個Request中,我們對Browser按下F5,畫面會變成 :
"我是從index送過來的" 這訊息消失了!! TempData 確實已經被刪除。




更詳細的說明,可參考以下網站 : 

另外關於 RedirectToAction 所引發的 Http 302 可參考以下 :