2012年8月31日 星期五

[ASP.Net MVC] ViewBag、ViewData 和 TempData 的區別


ViewData TempData 都可以傳遞弱類型資料,區別如下:
ViewData 只在當前 Action 中有效,生命週期和 View 相同;
TempData 的資料至多只能經過一次Controller傳遞,並且每個元素至多只能被訪問一次,訪問以後,自動被刪除。
TempData 一般用於臨時的緩存內容或拋出錯誤頁面時傳遞錯誤資訊,可以將TempData 在使用之前存儲到相應的 ViewData 中以備迴圈使用。

Index
public ActionResult Index()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";
    ViewData["myName"] = "
我的名字";
    TempData["myAgeOne"] = "26
";
    TempData["myAgeTwo"] = "27
";
    return View();
}
姓名:@ViewData["myName"]
<br />
年齡1@TempData["myAgeOne"]

Index網頁呈現如下:



About
姓名:@ViewData["myName"]
<br />
年齡1@TempData["myAgeOne"]
<br />
年齡2@TempData["myAgeTwo"]



ViewBag.Name=ViewData["Name"];
相同:使用同一個字典集合(資料來源)
不同:ViewBag MVC3 新增語法,ViewBag 不再是字典的鍵值對結構,而是 dynamic 動態類型,它會在程式運行的時候動態解析。不過 ViewBag 雖然說因為 dynamic 的特點,在使用時可以不用類別轉換,但也因為這樣,在速度上是會比 ViewData 慢一些。

Dynamically Typed Object 動態類型
C#4.0加入了dynamic關鍵字,可以申明一個變數的static類型為dynamic
使用dynamic的好處在於,可以不去關心物件是來源於COM, IronPython, HTML DOM或者反射,只要知道有什麼方法可以調用就可以了,剩下的工作可以留給runtime
參考資料

1 則留言:

  1. Determine if theіr сompensation plan business fair?
    Deliveries of the dеvіce on Monday, L&T announсed baggіng two οrders
    worth a tοtal of $2, 000. Tο tap into thіѕ pгefаb ρowеr doеs so through а сarefullу definеd mеchanіѕm business
    called an application programmіng intеrfaсes,
    or AРI s. The cοmpany's shareholders have now approved the spin-off, paving the way for the success of Soul headphones.

    My site - http://centr.md/index.php?do=/blog/7919/blogueiro-improve-search-engine-ranking-rodrigo-zandonadi/

    回覆刪除