2020年1月1日 星期三

MVC的TempData 則是可雙向交換的資料,ViewData 是單向丟給 View 的資料

https://dotblogs.com.tw/regionbbs/2012/01/19/asp_net_mvc_view_object_differences

ViewData 和 TempData 是在 MVC 中暫存資料的一種物件,和 Web Form 的 ViewState 很像

所以,ViewData 是單向丟給 View 的資料,而 TempData 則是可雙向交換的資料,將 TempData 視為 Session,就可以更明白它的用處了。


https://ithelp.ithome.com.tw/articles/10219477
SessionStateTempDataProvider 控制儲存TempData

上面說到TempData字典集合生命週期除了當下請求, 導頁後仍可續存.原因是在SessionStateTempDataProvider將資料存在Session
controllerContext.HttpContext.Session["__ControllerTempData"]
可以透過上面程式碼取得當前的TempData字典集合物件.
 https://dotblogs.com.tw/wadehuang36/2010/10/02/tempdata

預設的TempDataProvider是SessionStateTempDataProvider,你沒有看錯,預設是用Session來存放TempData,Session不是使用者存放資料,而且存留時間預設在20分鐘的嗎?
所以SessionStateTempDataProvider有做一些手段,Controller起來時,從Session載入TempData,然後刪除Session,所以在Action時是不會看到TempData的Session,在讀取TempData時,會記錄用了那些Key,在Controller結束時,會把沒有過的TempData在存回Session中,所以一直沒有讀取的TempData是會存在到Session消失的
原始碼:
https://github.com/aspnet/AspNetWebStack/blob/master/src/System.Web.Mvc/SessionStateTempDataProvider.cs


關鍵字:
ViewData、TempData、ViewDataDictionary、TempDataDictionary、ITempDataProvider、Session、SessionStateTempDataProvider、__ControllerTempData、TempDataSessionStateKey

沒有留言:

張貼留言