Asp.net-Mvc

TempData 在第二次請求後不會銷毀

  • October 10, 2012

我在 actionfilter 中的第一次請求時將值放入 TempData。

filterContext.Controller.TempData["value"] = true;

之後第二個請求進來,我檢查值

filterContext.Controller.TempData.ContainsKey("value")

價值就在那裡。然後第三個請求進來,我再次檢查該值

filterContext.Controller.TempData.ContainsKey("value")

並且價值仍然存在。不應該在第二次請求後銷毀這個值嗎?所有請求都是 AJAX 請求。

不應該在第二次請求後銷毀這個值嗎?

只有當你閱讀它:

var value = filterContext.Controller.TempData["value"];

如果您不從 TempData 讀取值,它不會被驅逐。

下面是TempData.Itemsgetter 的定義方式:

public object get_Item(string key)
{
   object obj2;
   if (this.TryGetValue(key, out obj2))
   {
       this._initialKeys.Remove(key);
       return obj2;
   }
   return null;
}

請注意,僅當您呼叫 getter 並且僅當在集合中找到該值時,該值才會被逐出。在您展示的程式碼中,您所做的只是檢查 TempData 是否包含給定的鍵,但您尚未讀取該鍵的值。

如果需要,您可以手動逐出 TempData 值:

filterContext.Controller.TempData.Remove("value");

還有一種方法可以讓您讀取值而不刪除它:

var value = filterContext.Controller.TempData.Peek("value");

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