2012-10-10 15 views
10

Bir actionfilter'da ilk istekte TempData'ya bir değer veriyorum.TempData ikinci istekten sonra yok olmaz

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

bundan sonra ikinci bir istek gelir ve ben değer yok değere

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

kontrol edin. Daha sonra üçüncü bir istek gelir ve değeri tekrar

kontrol edin ve değer hala mevcut. İkinci talep sonrası bu değer yok olmaz mı? Tüm istek AJAX istekleridir.

cevap

30

Bu istek ikinci istekten sonra yok olmaz mı?

Onu okumak olasıdır:

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

bunu tahliye olmayacak TempData değeri okumak yoksa.

İşte TempData.Items alıcı şu şekilde tanımlanır: Eğer getter ararsanız ve değer koleksiyonunda bulunmuştur yalnızca değeri yalnızca tahliye edilecek nasıl

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

dikkat edin. Yaptığınız tüm kodda, TempData'nın belirli bir anahtar içerip içermediğini kontrol edin, ancak bu tuşun değerini okumadınız.

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

Ve bunu çıkarmadan değerini okumak sağlayan bir yöntem de var:

elle isterseniz TempData değerini tahliye olabilir

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