2009-04-17 8 views
16

मुझे निम्न त्रुटि होने पर त्रुटि मिलती है:सी # सत्र की जांच नहीं कर सकता है?

if(Session["value"] != null) 
{ 
    // code 
} 

मुझे जो त्रुटि मिलती है वह यह है:

ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है।

यह क्यों है? मैं हमेशा इस तरह अपना सत्र जांचता हूं? मैं एमवीसी फ्रेमवर्क का उपयोग कर रहा हूं, क्या इसका इसके साथ कुछ संबंध है?

संपादित करें:

कोड नियंत्रक के निर्माता में है:

public class MyController : ControllerBase 
{ 
    private int mVar; 

    public MyController() 
    { 
     if (Session["value"] != null) 
     { 
      mVar= (int)Session["value"]; 
     } 
    } 
} 
+0

मैं जिस तरह से आप सत्र मान की जाँच के साथ यहां एक संभावित समस्या को देखते हैं।आपको इसे "var myvar = सत्र [" मान "] के रूप में होना चाहिए;" फिर जांचें कि क्या यह शून्य है और इसे वापस डाला गया है। सत्र की जांच करने और इसे कास्टिंग करने के बीच सत्र अमान्य होने की संभावना है। - बस सोचा था कि आपको पता होना चाहिए :) – TWith2Sugars

+0

टिप के लिए Thnx :) – Martijn

+0

आपको 'var myvar = सत्र ["मान"] की आवश्यकता नहीं है; अगर (myvar! = null) ... '' के रूप में (सत्र ["मान"]! = शून्य) 'ठीक काम करेगा। मैं 'सत्र ["मान"] 'दो बार प्राप्त करने के बारे में भी चिंता नहीं करता (एक बार के लिए! = शून्य और चर सेट करने के लिए) क्योंकि अनुकूलक को इसका ख्याल रखना चाहिए। नोट: आप [?? ऑपरेटर] (http://msdn.microsoft.com/en-us/library/ms173224.aspx) उपयोगी: 'mVar = (int) सत्र [" मान "] ?? 0; '। यह शून्य सत्र की समस्या को ठीक नहीं करेगा जो इस धागे के बारे में है (क्योंकि यह सत्र की जांच नहीं कर रहा है लेकिन सत्र से मूल्य)। – Trisped

उत्तर

18

सत्र केवल वास्तव में एक कार्रवाई के प्रसंस्करण दौरान मौजूद है - मैं इसे एक नियंत्रक के निर्माता के लिए मान्य होने की उम्मीद नहीं होता। उदाहरण के लिए, नियंत्रक (सभी के लिए मुझे पता है) अनुरोधों के बीच फिर से उपयोग किया जा सकता है।

आप या तो कार्रवाई (विधि) में यह करने के लिए या (शायद अधिक उचित रूप से) एक कार्रवाई फिल्टर में, OnActionExecuting (आदि) विधि (रों) की आवश्यकता होगी, या:

public abstract class ControllerBase : Controller 
{ 
    protected override void OnActionExecuting(
     ActionExecutingContext filterContext) 
    { 
     // code involving this.Session // edited to simplify 
     base.OnActionExecuting(filterContext); // re-added in edit 
    } 
} 
+1

Thnx है। लेकिन मुझे सत्र ["val"] के बजाय filterContext.RequestContext.HttpContext.Session ["val"] का उपयोग करने की आवश्यकता क्यों है? और क्या मुझे अभी भी आधार का आह्वान करने की आवश्यकता है। ऑनएक्शन एक्सेलिंग (फ़िल्टरकॉन्टेक्स्ट) ;? – Martijn

+0

असल में, आप शायद कर सकते हैं - मैं संपादित करूंगा। –

+1

ठीक है :) क्या आप मुझे संक्षेप में बता सकते हैं कि फ़िल्टरकॉन्टेक्स्ट किस बारे में है? – Martijn

2

आप इस-

if(null != HttpContext.Current.Session["Value"]) 
{ 
    //Code here. 
} 
+0

'System.Web.HttpContextBase' में 'वर्तमान' की परिभाषा नहीं है और 'System.Web.HttpContextBase' प्रकार के पहले तर्क को स्वीकार करने वाला कोई एक्सटेंशन विधि नहीं है (क्या आप एक निर्देश या असेंबली का उपयोग कर रहे हैं संदर्भ?) – Martijn

+0

जब मैं वर्तमान वस्तु को छोड़ देता हूं, तो यह काम करता है। लेकिन मुझे अभी भी त्रुटि मिलती है। मुझे लगता है कि पार्टारियो के कहने के साथ इसका कुछ संबंध है: सत्र वस्तु स्वयं शून्य है। अब lat's foound out क्यों: एस ... – Martijn

+0

ऐसा करने के लिए यह काम करेगा: System.Web.HttpContext.Current.Session ["Value"] –

2

आपको यह त्रुटि हो रही है जैसे कि यह करना होगा क्योंकि "सत्र" वस्तु शून्य है। इसलिए इसके ["मूल्य"] बिट को देखना असंभव है। मैं एमवीसी से परिचित नहीं हूं, लेकिन या तो एक बड़ी समस्या है जिससे सत्र वस्तु नहीं बनाई जा रही है, या आप जीवन चक्र के गलत बिंदु पर इसे एक्सेस कर रहे हैं, या आपको सत्र की जांच करने के लिए सिर्फ एक परीक्षण की आवश्यकता है! = शून्य।

21

[] एक सूचकांक है, यह कक्षा पर एक विधि की तरह कार्य करता है।

इस मामले में, सत्र शून्य है और आप उस पर अनुक्रमण नहीं कर सकते हैं।

यह करें:

if(Session != null && Session["value"] != null) 
{ 
    // code 
} 
+0

इससे मेरी मदद मिली। –

+0

धन्यवाद। सही समझ में आता है। आज थोड़ा सा सीख लिया! – mrwienerdog

+1

+1। यह सही उत्तर – arserbin3

1

वाक्य रचना का इस्तेमाल किया आपके द्वारा:

if (Session["mySessionVariable"] != null) 
{ 

} 

... एएसपी.नेट में सत्र ऑब्जेक्ट की जांच करने का सही तरीका है। मुझे संदेह है कि समस्या यह है क्योंकि आप एएसपी.नेट एमवीसी का उपयोग कर रहे हैं।

शायद हमारे कुछ एमवीसी विशेषज्ञ हमें एएसपी.नेट एमवीसी में ऐसा करने के सही तरीके के रूप में उजागर कर सकते हैं।

संपादित करें: मुझे लगता है कि मार्क ग्रावेल ने इसका जवाब पोस्ट करते समय अपना जवाब पोस्ट कर दिया है। यह illuminatory होना चाहिए।

1

मैं इस तरह से हल:

if (Session.Count > 0 && Session["mySessionVariable"].ToString() != null) 
{ 

} 
+1

नहीं होगा अगर (सत्र! = शून्य 0 और सत्र ["mySessionVariable"]! = Null) ' अच्छा कार्य करता है? – Trisped

+3

-1 यदि आपका सत्र वास्तव में शून्य है तो यह एक त्रुटि फेंक देगा। –

1
if(Session != null && Session["name"] != null && Session["name"].ToString()!="") 
{ 
    //fire code 
} 
0

तुम भी उपयोग कर सकते हैं:

if (Session == null || String.IsNullOrEmpty((string)Session["session_object"])){ 
    // Do something 
} 
संबंधित मुद्दे