2012-10-10 29 views
10

我在ActionFilter的第一次請求中將一個值放入TempData中。TempData不會在第二次請求後破壞

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

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

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

的值是存在的。然後第三個請求進來,我再次檢查值

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

並且值仍然存在。第二次請求後不應該將此值破壞?所有請求都是AJAX請求。

回答

30

不應該在第二次請求後銷燬該值嗎?

只有當你讀它:

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

如果不從閱讀到TempData它不會被驅逐的價值。

這裏的TempData.Items吸氣劑是如何定義的:

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");