ViewBag和TempData的區別 在控制器(Controller)中使用 ViewData: Controller里取數據賦值 * 前臺調用 ViewBag : Controller里取數據賦值 前臺調用: 按F12運行網站便可以看到運行結果,兩個也可以用於不分頁的新聞列表。 TempData ...
ViewBag和TempData的區別
ViewData | ViewBag |
它是Key/Value字典集合 | 它是dynamic類型對像 |
從Asp.net MVC 1 就有了 | ASP.NET MVC3 才有 |
基於Asp.net 3.5 framework | 基於Asp.net 4.0與.net framework |
ViewData比ViewBag快 | ViewBag比ViewData慢 |
在ViewPage中查詢數據時需要轉換合適的類型 | 在ViewPage中查詢數據時不需要類型轉換 |
有一些類型轉換代碼 | 可讀性更好 |
在控制器(Controller)中使用
ViewData:
Controller里取數據賦值
var markeType = new MarketDataProvider().GetBTIDData().Where(a=>a.ID!="0"); //在資料庫獲取數據,這是list數據 ViewBag.DateType = markeType;//給ViewBag.DateType 賦值 “DateType ”可以隨便寫名稱。
* 前臺調用
@foreach (var modelMarket in ViewData["Markettype"] as Dictionary<string, string>) { <div class="row" style="margin-top:10px"> <div class="col-md-4 text-right"><span class="red">*</span> @modelMarket.Value</div> </div> }
ViewBag :
Controller里取數據賦值
string str = "商標,版權,交易,國際註冊"; string[] strs = str.Split(','); Dictionary<string, string> dic = new Dictionary<string, string>(); for(int i=0;i<5;i++) { dic.Add(i.ToString(),strs[i]); } ViewData["Markettype"] = dic;
前臺調用:
@foreach (var modelMarket2 in ViewBag.DateType) { <div class="row" style="margin-top:10px"> <div class="col-md-4 text-right"><span class="red">*</span> @modelMarket2.Text</div> </div> }
按F12運行網站便可以看到運行結果,兩個也可以用於不分頁的新聞列表。
TempData
TempData也是字典,所以它的使用完全等同於ViewData,但兩者之間還是存在很大的差異。
TempData,顧名思義,就是臨時數據。TempData保存在Session中,Controller每次請求的時候都會從Session中獲取TempData,然後清除Session。基於這樣的事實,在每次請求結束後,TempData的生命周期也就結束了。網上有一句話:TempData至多之只能通過一次Controller傳遞,假設我們的Controller是跳轉到下一個Controller,以此類推,在最後一個Controlle相應的視圖上,的確可以獲得該TempData。但是,這並不是說TempData已經跨請求傳遞了,這依然只是一次請求,至於是否是跨Controller傳遞,我認為不是,所謂的通過Controller傳遞,是指將TempData傳遞給View,在上面的例子中,只有最後的Controller才會將該TempData傳遞給View,所以,TempData的確是只能通過一次Controller傳遞。
註:有的文字內容搜自博客園。