2012-10-10 10 views
10

मैं एक्शनफिल्टर में पहले अनुरोध पर टेम्पपेडाटा में एक मूल्य डाल रहा हूं।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; 
} 

सूचना कैसे मान केवल बेदखल किया जाएगा यदि आप गेटर फोन और केवल तभी मूल्य संग्रह में पाया गया था। कोड में आपने जो कुछ किया है, वह यह है कि टेम्पाडाटा में एक दी गई कुंजी है या नहीं, लेकिन आपने इस कुंजी के मान को नहीं पढ़ा है।

आप मैन्युअल TempData मूल्य को बेदखल कर सकता है अगर आप चाहते हैं:

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

और वहाँ भी एक तरीका है जिसके आप इसे हटाने के बिना मूल्य को पढ़ने के लिए अनुमति देता है है:

var value = filterContext.Controller.TempData.Peek("value"); 
संबंधित मुद्दे