2012-10-10 17 views
10

私は、actionfilterの最初のリクエストでTempDataに値を入れています。TempDataは2回目のリクエスト後に破棄されません

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

その後、第2の要求が入って来て、私は値がある値

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

を確認してください。次に3番目のリクエストが来て、再び値を確認します。

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

この値はまだ存在します。 2回目のリクエスト後にこの値が破棄されるべきではありませんか?すべてのリクエストはAJAXリクエストです。

答えて

30

2番目の要求後にこの値を破棄しないでください。あなたはそれが追い出されることはありませんTempDataをから値を読んでいない場合は

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

:あなたはそれを読む場合にのみ

はここTempData.Itemsゲッターが定義されている方法は次のとおりです。あなたがゲッターを呼び出した場合、その値がコレクションで見つかった場合にのみ、値のみ追い出されるか

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

注意してください。あなたが示したコードでは、TempDataに与えられたキーが含まれているが、このキーの値を読み取っていないかどうかを確認するだけです。

したい場合は、手動でTempDataを値を立ち退かせることができます:

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

をそして、あなたはそれを削除せずに値を読み取ることができます方法もあります:

var value = filterContext.Controller.TempData.Peek("value"); 
関連する問題