Asp.net-Mvc
ASP.NET MVC 瀏覽器刷新是否使 TempData 無用?
如果我重定向到傳遞 TempData 以初始化頁面的新頁面,它可以正常工作,但是如果使用者在瀏覽器中按下刷新按鈕,則 TempData 不再可用。鑑於此,是否存在可以可靠使用 TempData 的情況?
或者有什麼方法可以消除或緩解使用者刷新的問題?
在 MVC 1 中,是的,在儲存密鑰後的下一個請求後臨時數據會失去。
但是,使用 MVC 2,臨時數據在第一次嘗試訪問後會失去。
您始終可以使用 TempData 無論如何都使用的 Session 來解決您遇到的臨時數據失去問題。
來自 MVC 2 Beta 發行說明:
TempDataDictionary 改進
TempDataDictionary 類的行為已稍作更改,以解決臨時數據被過早刪除或持續時間超過必要的情況。例如,在設置臨時數據的同一請求中讀取臨時數據的情況下,臨時數據會為下一個請求保留,即使意圖是刪除它。在其他情況下,臨時數據不會跨多個連續重定向保留。
為了解決這些情況,對 TempDataDictionary 類進行了更改,以便所有鍵無限期地存在,直到從 TempDataDictionary 對像中讀取鍵。Keep 方法被添加到 TempDataDictionary 以讓您指示在讀取後不應刪除該值。RedirectToActionResult 是呼叫 Keep 方法以保留下一個請求的所有鍵的範例。
您還可以直接查看 MVC 2 原始碼以查看這些更改:
MVC 1:
public object this[string key] { get { object value; if (TryGetValue(key, out value)) { return value; } return null; } set { _data[key] = value; _modifiedKeys.Add(key); } }MVC 2:
public object this[string key] { get { object value; if (TryGetValue(key, out value)) { _initialKeys.Remove(key); return value; } return null; } set { _data[key] = value; _initialKeys.Add(key); } }
你應該寫
TempData.Keep("nameofthedata");在您的控制器中,那麼它也會將該數據保持在刷新情況下。