2010-05-05 11 views
5

के माध्यम से किसी मान को प्रारंभ करना मुझे एक सी # अक्षर का उपयोग करके जावास्क्रिप्ट में एक मान प्रारंभ करना होगा जो सत्र परिवर्तनीय के संदर्भ में है। मैं निम्नलिखित कोडसत्र परिवर्तनीय

<script type="text/javascript" language="javascript" > 
    var myIndex = <%= !((Session["myIndex"]).Equals(null)||(Session["myIndex"]).Equals("")) ? Session["backgroundIndex"] : "1" %>; 

उपयोग कर रहा हूँ हालांकि इसके बाद के संस्करण कोड मुझे एक क्लासिक Object reference not set to an instance of an object. त्रुटि दे रहा है। क्यूं कर? (Session["myIndex"]).Equals(null) इस विशेष त्रुटि को कैप्चर नहीं करना चाहिए?

+2

सत्र [ "myIndex"] अशक्त देता है, और अशक्त एक .Equals() फंक्शन नहीं है। आपको == के साथ तुलना करने की आवश्यकता है, क्योंकि यह ऐसा फ़ंक्शन नहीं है जिसके लिए किसी ऑब्जेक्ट को प्राप्त करने की आवश्यकता हो। – Corey

उत्तर

0

यह (मैं इसे परीक्षण किया है!) काम करेगा:

var myIndex = <%=!string.IsNullOrEmpty((string)Session["myIndex"]) ? Session["myIndex"] : "1" %> ; 
1

क्या आप वाकई Session["myIndex"] शून्य नहीं है?

आपको एक और शॉर्ट सर्किट जोड़ना चाहिए या (Session["myIndex"] == null) के लिए जांचें और (Session["myIndex"]).Equals(null) से छुटकारा पाएं।

1

वस्तु संदर्भ त्रुटि हो सकता है क्योंकि (सत्र [ "myIndex"]) रिक्त है,

(सत्र [ "myIndex"])। तो आप इसे उपयोग कर सकते हैं आप की तरह की तुलना करना चाहते बराबरी मूल्य की तुलना करने के लिए किया जाता है (सत्र ["myIndex"])। बराबर ("yourIndex")

-3

एक संरक्षित चर बनाने के पीछे कोड में और इसे प्रारंभ करें। मुख्य लाभ यह है कि आप इसे वहां डीबग कर सकते हैं। और प्लस में आप कोशिश पकड़ने का उपयोग कर सकते हैं।

कोड-पीछे

protected string sessionValue; 
private void Page_Load(...) 
{ 
try 
{ 
sessionValue = Session["key"].ToString(); 
} 
catch 
{ 
sessionValue = [defaultValue]; 
} 
} 

जावास्क्रिप्ट:

<script> 
var sessionValue = "<%= sessionValue %>"; 
</script> 

इस तरह आप दुर्घटना से बचने और कुछ और कर सकते हैं अगर sessionValue रिक्त है या एक DefaultValue है।

+2

-1 मैं एक साधारण * अगर (सत्र ["कुंजी"] == शून्य) * चेक के लिए एक विकल्प के रूप में प्रयास/पकड़ का उपयोग नहीं करूँगा .... मुझे उम्मीद है कि आप उस विधि का अक्सर उपयोग नहीं करते हैं? – slugster

+0

कोशिश करने के पीछे विचार यह है कि आप एक दुर्घटना से बच सकते हैं, अगर प्रत्येक बार सत्र समाप्त हो जाता है तो आपको एक दुर्घटना हो जाएगी। यहां तक ​​कि अगर मैं अनुभवी नहीं हूं तो मुझे विश्वास है कि यह करने का यह सबसे सुरक्षित तरीका है। यदि आप जांच कर एक सरल कर कर दुर्घटना से बच सकते हैं तो यह ठीक है, लेकिन यदि आवेदन की संभावना थोड़ी सी संभावना है तो मैं कोशिश कर सकता हूं कि सुरक्षित प्रयास पकड़ने का संस्करण – GxG

+2

नहीं, सत्र समाप्त होने पर पृष्ठ क्रैश नहीं होगा - आप बस इसमें कुछ भी नहीं के साथ एक नया सत्र मिलता है। * अगर शून्य * चेक के साथ चिपके रहें, और कभी भी यह धारणा न करें कि आपका आइटम सही ढंग से सत्र में रखा गया है। सलाह के लिए – slugster

3

समस्या यह है कि null कोई ऑब्जेक्ट नहीं है, और Equals() विधि केवल ऑब्जेक्ट्स पर उपयोग की जा सकती है। यदि आप यह देखना चाहते हैं कि आपका सत्र ऑब्जेक्ट शून्य है, तो आपको (Session["myIndex"] == null) का उपयोग करना चाहिए। आप रिक्त तारों पर अतिरिक्त जांच के लिए string.IsNullOrEmpty() का भी उपयोग कर सकते हैं। उस मामले में, अपने कोड होना चाहिए:

var myIndex = <%= !string.IsNullOrEmpty((string)Session["myIndex"]) ? Session["backgroundIndex"] : "1" %>; 

नोट: इस मामले में Session["myIndex"] नहीं Session["backgroundIndex"] चाहिए? अन्यथा मेरी राय में शून्य या खाली स्ट्रिंग जांच थोड़ा बेकार है।

+0

-1 आपके लिए भी ... आप केवल एक * स्ट्रिंग नहीं कर सकते हैं। ISNullOrEmpty (सत्र ["myIndex"]) * - यह * सत्र [कुंजी] * के रूप में संकलित नहीं होगा, एक स्ट्रिंग नहीं, एक ऑब्जेक्ट देता है। आपका स्पष्टीकरण हालांकि अच्छा था। – slugster

+0

@ स्लगस्टर: नमूना के संदर्भ से, यह स्पष्ट है कि 'सत्र ["myIndex"]' एक स्ट्रिंग है। यदि यह एक अलग वस्तु है, तो आप अपवाद को फेंकने दें, क्योंकि आप इसकी अपेक्षा नहीं कर रहे हैं। इसके अलावा, प्रदान किया गया नमूना तारों की जांच भी नहीं करता है। – Prutswonder

+0

मैं मानता हूं कि नमूना या तो तारों (या कास्ट) की जांच नहीं करता है। इससे कोई फर्क नहीं पड़ता कि उस विशेष इंडेक्स में क्या होता है, इसे टाइप * ऑब्जेक्ट * के रूप में वापस किया जाता है। उस समय मैंने नीचे 4 जवाब दिए थे, आपका सबसे अच्छा था लेकिन वाक्य रचनात्मक त्रुटियों के साथ। यदि आप पोस्ट संपादित करते हैं तो मैं अपना डाउनवोट उलट दूंगा। – slugster

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