2012-10-10 8 views
10

Ich gebe einen Wert in TempData auf erste Anfrage in einem Actionfilter.TempData wird nicht nach der zweiten Anfrage zerstört

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

danach eine zweite Anforderung kommt und ich überprüfen, für den Wert

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

der Wert ist. Dann kommt eine dritte Anfrage und ich überprüfe erneut den Wert

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

und der Wert ist noch vorhanden. Sollte dieser Wert nicht nach der zweiten Anfrage zerstört werden? Alle Anfragen sind AJAX-Anfragen.

Antwort

30

Sollte dieser Wert nicht nach der zweiten Anfrage zerstört werden?

Nur wenn Sie es lesen:

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

Wenn Sie nicht den Wert aus dem TempData gelesen wird es nicht vertrieben werden.

Hier ist, wie die TempData.Items Getter definiert:

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

Beachten Sie, wie sich der Wert nur vertrieben werden, wenn Sie den Getter anrufen und nur dann, wenn der Wert in der Sammlung gefunden. In dem Code, den Sie angezeigt haben, überprüfen Sie lediglich, ob die TempData einen bestimmten Schlüssel enthält, aber Sie haben den Wert dieses Schlüssels nicht gelesen.

könnten Sie den Wert TempData vertreiben, wenn Sie wollen:

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

Und es gibt auch eine Methode, die Sie den Wert gelesen werden kann, ohne sie zu entfernen:

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