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"]
可以透過上面程式碼取得當前的
https://dotblogs.com.tw/wadehuang36/2010/10/02/tempdataTempData
字典集合物件.
預設的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
沒有留言:
張貼留言