2012-05-27 7 views
9

मैं एक साइट को सत्र के रूप में कम करने की कोशिश कर रहा था। तो <sessionState mode="Off" /> को मेरे web.config में जोड़ें। उसके बाद अगर मैं निष्पादितTempData का उपयोग करते हुए <sessionState mode = "off" />

Session["test"] = "yes"; 

मैं एक त्रुटि "एक वस्तु का एक उदाहरण के लिए सेट नहीं वस्तु संदर्भ मिलता है। "यह ठीक है।

लेकिन इस विन्यास के साथ मैं

TempData["test"] = "yes"; 
नियंत्रक में

सेट और देखें पेज में TempData["test"]; मुद्रित कर सकते हैं। यह अच्छी तरह से काम कर रहा है।

MSDN के अनुसार "TempData संपत्ति मान सत्र स्थिति में संग्रहीत है"।

तो यदि मैं <sessionState mode="Off" /> का उल्लेख करता हूं तो टेम्पपेडाटा कैसे काम कर रहा है? क्या ASP.NET अभी भी सत्र में या कहीं और TempData संग्रहीत कर रहा है?

उत्तर

16

यह अक्षम सत्र स्थिति के साथ ही काम कर सकता है यदि आप उसी अनुरोध के दौरान अपने दृश्य पर TempData["test"] प्रिंट कर रहे हैं - इस प्रकार यह मान TempData शब्दकोश से हटा दिया गया है और एमवीसी इसे सत्र स्थिति में सहेजने की कोशिश नहीं कर रहा है। आपके विचार से निकालने के लिए प्रयास करें और आप [SessionState(SessionStateBehavior.Disabled)] विशेषता जोड़ने या ITempDataProvider इंटरफ़ेस का उपयोग कर अपनी खुद की TempData प्रदाता को लागू करने से System.InvalidOperationException: The SessionStateTempDataProvider class requires session state to be enabled.

आप व्यक्तिगत रूप से अपने नियंत्रकों के लिए सत्र स्थिति निष्क्रिय कर सकते हैं मिलेगा।

[संपादित करें] बस मेरा पहला बिंदु की व्याख्या करने, चलो दो स्थितियों की कल्पना:

  • आप नियंत्रक कार्रवाई कि TempData["test"] करने के लिए कुछ मूल्य और एक इसी का मानना ​​है कि इस कार्रवाई और प्रिंट इस डेटा से लौटे किया जा रहा है प्रदान करती है । इस मामले में सब कुछ सत्र स्थिति के बिना भी काम करेगा क्योंकि अनुरोधों के बीच TempData["test"] स्टोर करने की आवश्यकता नहीं है।
  • आपके पास नियंत्रक क्रिया है जो TempData["test"] पर कुछ मान निर्दिष्ट करती है लेकिन उपयोगकर्ता को अपने स्वयं के दृश्य के साथ किसी अन्य क्रिया को रीडायरेक्ट करता है जो इस डेटा को प्रिंट करता है। इस मामले में यह सत्र स्थिति अक्षम के साथ काम नहीं करेगा क्योंकि एमवीसी को आपके अनुरोधों के बीच TempData["test"] मूल्य स्टोर करने की आवश्यकता है।
+0

मैं ITempDataProvider के बारे में समझता हूं और इसके लिए धन्यवाद। मैंने यह भी पाया कि सत्र के बजाय आप यहां से कुकीज़ में अस्थायी डेटा रख सकते हैं। http://afana.me/post/session-less-controllers-and-TempData-ASPNET-MVC.aspx। –

+0

हां, लड़के ने अपना स्वयं का टेम्पाडाटा प्रदाता लागू किया है जो कुकीज़ पर आधारित है। –

+0

हम एकल अनुरोध के लिए TempData का उपयोग सही करते हैं? तो हम नियंत्रक में TempData के लिए मूल्य निर्धारित करते हैं और दृश्य पृष्ठ में मिलता है। मुझे एक संदेह है कि "इसे अपने दृश्य से हटाने का प्रयास करें और आपको त्रुटि मिलेगी"। क्या आप कृपया इसे समझा सकते हैं? –

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