ASP.NET MVC中viewData、viewBag和templateData的使用與區別

一:類型比較ide

1.1)ViewBag是動態類型(dynamic)。spa

1.2)ViewData是一個字典型的(Dictionary)-->ViewDataDictionary。對象

1.3)TempData是一個字典型的(Dictionary)-->TempDataDictionary。生命週期

 

二:生命週期和做用域作用域

2.1)ViewBag生命週期和View相同,只能做用於一個View。string

2.2)ViewData生命週期和View相同,只能做用於一個View。it

2.3)TempData生命週期爲被調用前一直存在,可是調用一次的後值就會被刪除,且能夠在不一樣的Action中進行傳值。io

TempData  保存在Session中,Controller每次執行請求的時候,會從Session中先獲取 TempData,然後清除Session,獲取完TempData數據,雖然保存在內部字典對象中,可是其集合中的每一個條目訪問一次後就從字典表中刪 除。具體代碼層面,TempData獲取過程是經過SessionStateTempDataProvider.LoadTempData方法從 ControllerContext的Session中讀取數據,然後清除Session,故TempData只能跨Controller傳遞一次。foreach

 

三:使用區別數據類型

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對應的值只要被調用一次後就會被自動清空。

相關文章
相關標籤/搜索