2011-09-23 10 views
5

के रूप में करने के लिए कारण बनता है मैं एक नियंत्रक तर्क है कि एक के लिए लग रहा है होगा है: सत्र मूल्यMVC 3 Session.Abandon() एक TempData सेट करने से पहले कहा जाता है [ "myvalue"] = "foo" अगले नियंत्रक TempData अशक्त

//checks value null etc.. for existing record in session memory. 
Session["certnum"] 

//is called to initiate a New Record that will be created. 
Session.Abandon(); 

हालांकि प्रक्रियात्मक कोडिंग में है कि Session.Abandon();:

फिर नियंत्रक में मैं एक शर्त है करने के लिए जहां का फैसला किया था TempData ["myobject"] = "foo" के निर्माण से पहले आता है, और कोड के माध्यम से कदम उठाने पर तत्काल विंडो में TempData मेरा मूल्य दिखाता है और सब अच्छा लगता है। तब पर अन्य नियंत्रक को अनुप्रेषित:

return RedirectToAction("ChildInfo", "NewRecord"); 

यह ChildInfo विधि नहीं रह गया है TempData मूल्य है ... अब यह रिक्त है। सत्र Abandon विधि TempData मान सेट करने से पहले रास्ता कहा गया था, यह सुनिश्चित नहीं है कि यह एमवीसी सत्रों के साथ एक बग है, लेकिन यह मुझे शून्य समझ में आता है। यदि मैं एक नया लाइटवेट सत्र TempData बना रहा हूं, तो यह अगले नियंत्रक के लिए जारी रहना चाहिए। यदि मैं सत्र को हटा देता हूं। एबैंडन() विधि तब TempData मान पहले काम करता रहता है जैसा कि पहले किया गया था।

+0

यहां महत्वपूर्ण बात यह है कि TempData सत्र पर निर्भर करता है। सत्र चला गया है इसलिए TempData चला गया है। –

+0

@Adam हाँ मुझे एहसास है कि हालांकि मैं TempData मान बनाने से पहले सत्र .Abandon() को कॉल कर रहा हूं, मैं नियंत्रक की एक ही क्रियात्मक विधि में हूं, लेकिन फिर भी, यह मेरे लिए सिर्फ पागल लगता है। –

+0

यह पागल क्यों होगा? आप tempdata के लिए आवश्यक ऑब्जेक्ट को रीसेट कर रहे हैं। यह कहने की तरह है कि "मैं टेबल में सभी पंक्तियों को हटा देता हूं, लेकिन मुझे समझ में नहीं आता कि अगले अनुरोध पर जिस पंक्ति पर मैं अनुरोध करने जा रहा हूं वह वहां नहीं है?" :) –

उत्तर

11

Session.Abandon() विधि अनुरोध के अंत में वर्तमान सत्र को साफ़ करता है, जो इसे करने के लिए डिज़ाइन किया गया है।

http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon.aspx

आप एक अलग कार्रवाई रीडायरेक्ट करना चाहते हैं तो देखें, तो आप रीडायरेक्ट कॉल करने के लिए की तरह क्या किया है की क्या ज़रूरत है। यदि आप Abandon() का उपयोग करते हैं तो अनुरोध एक नया सत्र आईडी प्राप्त करेगा।

आप एक सत्र आप Session.Remove या Session.RemoveAll तरीकों का उपयोग करने की आवश्यकता से कुछ निकालना चाहते हैं (इसके अलावा ClearRemoveAll के रूप में भी ऐसा ही करने के लिए इस्तेमाल किया जा सकता है इस के द्वारा किया जा जाएगा:।

Session.Remove(itemToRemove); 

या

Session.RemoveAll() 

इन दो विकल्पों में से किसी एक का उपयोग करके आप सत्र से कुछ या सभी पहले संग्रहीत डेटा को हटा सकते हैं, वास्तव में बिना सत्र आईडी को अगले अनुरोध पर पुन: उत्पन्न किया जा सकता है।

+0

धन्यवाद बर्नी! –

1

Session.Abandon विधि सत्र ऑब्जेक्ट को साफ़ नहीं करती है, यह केवल झंडे रखती है कि इसे नहीं रखा जाना चाहिए। वर्तमान ऑब्जेक्ट के दौरान सत्र ऑब्जेक्ट अभी भी बरकरार है।

जब प्रतिक्रिया पूरी हो जाती है, तो सत्र ऑब्जेक्ट छोड़ दिया जाता है, ताकि अगली बार ब्राउज़र अनुरोध कर सके, सर्वर को एक नया सत्र ऑब्जेक्ट सेट करना होगा। जब सत्र ऑब्जेक्ट छोड़ दिया जाता है तो उस पूरे अनुरोध के दौरान सत्र ऑब्जेक्ट में जो भी कुछ भी रखा जाता है, वह दूर हो जाता है।

जब आप रीडायरेक्ट करते हैं, तो ब्राउज़र के जवाब के रूप में एक पुनर्निर्देशन पृष्ठ भेजा जाता है, जो तब नए पृष्ठ का अनुरोध करता है। यदि आप सत्र ऑब्जेक्ट को त्यागने के लिए चिह्नित करते हैं और फिर रीडायरेक्ट करते हैं, तो नया पृष्ठ नया सत्र ऑब्जेक्ट प्राप्त करेगा।

+0

अब मैं समझता हूं। धन्यवाद गुफा। –

0

इस तरह यह काम करना चाहिए।

सत्र। बैंक तुरंत सत्र को नहीं मारता है। यह पृष्ठ के अंत तक चली है। फिर, अगले पृष्ठ लोड पर, एक नया सत्र बनाया जाता है।

+0

धन्यवाद! मैं इसकी सराहना करता हूं –

संबंधित मुद्दे