一:類型比較
1.1)ViewBag是動態類型(dynamic)。
1.2)ViewData是一個字典型的(Dictionary)-->ViewDataDictionary。
1.3)TempData是一個字典型的(Dictionary)-->TempDataDictionary。
二:生命周期和作用域
2.1)ViewBag生命周期和View相同,只能作用於一個View。
2.2)ViewData生命周期和View相同,只能作用於一個View。
2.3)TempData生命周期為被調用前一直存在,但是調用一次的后值就會被刪除,且可以在不同的Action中進行傳值。
TempData 保存在Session中,Controller每次執行請求的時候,會從Session中先獲取 TempData,而后清除Session,獲取完TempData數據,雖然保存在內部字典對象中,但是其集合中的每個條目訪問一次后就從字典表中刪 除。具體代碼層面,TempData獲取過程是通過SessionStateTempDataProvider.LoadTempData方法從 ControllerContext的Session中讀取數據,而后清除Session,故TempData只能跨Controller傳遞一次。
三:使用區別
3.1)viewBag不需要數據轉換
Controller: ViewBag.key = new Dictionary<string, string>();
View :
@foreach (var item in ViewBag.key)
{
@item;
}
3.2)ViewBag中查詢數據是需要轉換數據類型
Controller: ViewData["key"] = new Dictionary<string, string>() { { "key1", "value1" }, { "key2", "value2" } };
View :
@foreach (var item in ViewData["key"] as Dictionary<string, string>)
{
@item;
}
3.3)TempData使用和ViewBag一樣,但是注意TempData對應的值只要被調用一次后就會被自動清空。