Asp.net-Mvc

ASP.NET MVC 瀏覽器刷新是否使 TempData 無用?

  • February 14, 2013

如果我重定向到傳遞 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");

在您的控制器中,那麼它也會將該數據保持在刷新情況下。

引用自:https://stackoverflow.com/questions/2642062