[Asp.net MVC] TempData、ViewData、ViewBag

若要將資料從後端Controller傳遞到View,除了使用ViewModel以外,最常見的就是底下三種
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 可參考以下 : 

Blogger : http://inblackbox.blogspot.tw/

 

 

 

幫忙宣傳--推廣的--(賣衣服的)

奇摩拍賣--http://tw.user.bid.yahoo.com/tw/user/Y7925877308&u=:Y7925877308&tp=

粉絲團--https://www.facebook.com/MOLISHOP888