2012-10-10 14 views
10

Wprowadzam wartość do TempData na pierwsze żądanie w filtrze akcji.TempData nie zniszczy po drugim żądaniu

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

potem drugi wniosek przychodzi i sprawdzić dla wartości

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

wartość ma. Następnie pojawia się trzecie żądanie i ponownie sprawdzam jego wartość:

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

, a wartość jest nadal obecna. Nie powinna być ta wartość zniszczona po drugiej prośbie? Wszystkie żądania są żądaniami AJAX.

Odpowiedz

30

Czy ta wartość nie powinna zostać zniszczona po drugim żądaniu?

Tylko jeśli ją przeczytać:

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

Jeśli nie odczytać wartość z TempData nie zostaną wydaleni.

Oto jak TempData.Items getter jest zdefiniowana:

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

Wskazówki jak wartość zostanie eksmitowany tylko jeśli zadzwonisz getter i tylko wtedy, gdy wartość znaleziono w kolekcji. W kodzie, który pokazałeś, wszystko co robisz, to sprawdzenie, czy TempData zawiera dany klucz, ale nie przeczytałeś wartości tego klucza.

Można ręcznie eksmitować wartość TempData, jeśli chcesz:

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

I jest też metoda, która pozwala odczytać wartość bez wyjmowania go:

var value = filterContext.Controller.TempData.Peek("value"); 
Powiązane problemy