2009-07-07 15 views
8

मुझे एएसपी.Net के बारे में बहुत कुछ पता नहीं है लेकिन मैं एक संदेश बॉक्स के लिए नया नियंत्रण करने की कोशिश कर रहा हूं। आप कुछ जानकारी दर्ज करते हैं और एक बटन दबाते हैं।एएसपी.Net: Page_Load() को कई बार कहा जा रहा है

हालांकि, बटन दबाए जाने पर कुछ विचित्र कारणों के लिए, पृष्ठ_लोड() को दूसरी बार कॉल किया जाता है, और सभी सदस्य चर को शून्य पर रीसेट कर दिया जाता है! मुझे उन चरों की आवश्यकता है, और पेज_लोड() को दूसरी बार कॉल करने का कारण नहीं है! बेशक कॉलस्टैक बेकार है।

+0

कॉल बेकार क्यों है? कृपया इसकी प्रतिलिपि पोस्ट करें ताकि हम देख सकें कि आपकी लोड विधि को कॉल किसने शुरू किया। –

+0

क्या आपके पास वेबस्क्रिप्ट कॉल करने वाला जावास्क्रिप्ट है? – NotMe

+0

यह सब पेज_लोड() से ऊपर दिखाता है [बाहरी कोड] – evilfred

उत्तर

16

याद रखें, ASP.Net में हर बार जब आप बटन क्लिक तरह की घटनाओं से निपटने सहित किसी भी प्रकार की एक पोस्टबैक, कारण की समीक्षा करने के लिए मदद करता है, तो आप एक ब्रांड के साथ काम कर रहे हैं आपके पेज क्लास का नया उदाहरण जिसे स्क्रैच से पुनर्निर्मित किया जाना चाहिए। सर्वर पर पृष्ठ बनाने के लिए पहले आपने जो भी काम किया है वह चला गया है। इसका मतलब है कि पूरे पृष्ठ जीवन चक्र, जिसमें आपके पृष्ठ लोड कोड शामिल हैं, न केवल क्लिक कोड चलाना।

हमेशा दो, और नहीं, कम नहीं हैं। एक अनुरोध और एक प्रतिक्रिया।

+1

guhhh तो उदाहरण चर बेकार हैं? यह अजीब बात है क्योंकि मैंने वेबपेज में कहीं और वही सामान किया है और वे ठीक काम करते हैं, मैं किसी भी तरह से अनुमान लगाने के लिए फिर से प्रत्यारोपण नहीं करता था। – evilfred

+1

इंस्टेंस वैरिएबल एक ही पोस्टबैक में ईवेंट के बीच डेटा रखने के लिए उपयोगी हैं। उदाहरण के लिए, आप जल्दी से एक एसक्यूएल कनेक्शन खोल सकते हैं और जीवन चक्र में बाद में उसी कनेक्शन का उपयोग कर सकते हैं। जहां इंस्टेंस वैरिएबल पोस्टबैक में कहीं और काम करते हैं, तो आप संभवतः व्यूस्टेट पर भरोसा कर सकते हैं। अधिक उन्नत अटकलों के माध्यम से जाने के बजाए * सबसे स्पष्ट * चीज़ के बारे में सोचने के लिए –

+0

+1! –

4

जब पृष्ठ वापस पोस्ट होता है, तो पृष्ठ_लोड विधि को कॉल किया जाता है। फिर, जब सर्वर वास्तव में पृष्ठ को संसाधित करता है और परिवर्तनों के आधार पर आपको एक नया भेजता है, तो पृष्ठ_लोड को फिर से बुलाया जाता है, वास्तव में आपको भेजे गए नए पृष्ठ पर पहली बार।

तो तुम Page_Load घटना में डेटा खींच या कुछ मूल्य निर्धारित कर रहे हैं, यह निम्नलिखित ब्लॉक में संलग्न:

if(!Page.IsPostBack) 
{ 

} 

अपने राज्य के कुछ संरक्षित करने के लिए। अन्यथा, आपके द्वारा पेज_लोड ईवेंट में डाले गए निर्देश हर बार निष्पादित होंगे।

यह ASP.Net पेज जीवन चक्र :)

0

बस अंधेरे में एक शॉट लेकिन शायद अपने Page_Load के बाद इस जोड़ें:

if (!IsPostBack) 
{ 
1

योएल उल्लेख किया है, उदाहरण के चर एक बार पेज वापस ग्राहक के लिए भेज दिया जाता है खो जाएगा। हालांकि, आपके चर के मानों को संग्रहीत करने के कई तरीके हैं ताकि आप उन्हें बाद में पुनर्प्राप्त कर सकें। State Management पर यह पृष्ठ एक अच्छा प्रारंभिक बिंदु है यदि आप और जानना चाहते हैं।

1

किसी भी टैग/तत्व के लिए आईएमजी, एंकर, ऑब्जेक्ट इत्यादि जैसे यूआरएल संदर्भ की आवश्यकता है खाली संदर्भ के लिए जांच की जानी चाहिए।

उदा। href = "", url = "", src = "" कुछ सामान्य त्रुटियां हैं।

1

इस कोड मेरे लिए काम करता है:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     if (Session["something"] == null) 
     { 
      Session["something"] = "1"; 
     } 
     else 
     { 
      Session["something"] = null; 

      //your page load code here 

     }    
    } 
} 
1

मेरे लिए, इस मुद्दे को थोड़ा जटिल था, लेकिन मैंने पाया कि

protected override void OnPreRender(EventArgs e)

हैंडलर केवल एक बार कहा जाता है, तो यह सुरक्षित है यदि आपके लिए पाइपलाइन में बहुत देर हो चुकी है तो वहां कुछ कार्रवाइयां डालें।

0

@ user3207728 की प्रतिक्रिया का एक विस्तार, मैंने पाया कि यह लिंक इसे अच्छी तरह से समझाता है और इसका एक सरल समाधान है ...

http://www.aspdotnet-suresh.com/2010/04/detect-browser-refresh-to-avoid-events.html

दुर्भाग्य से सिर्फ if (!Page.IsPostBack) के लिए जाँच के लिए पर्याप्त नहीं IsPostBack के रूप में हमेशा एक ताज़ा करने पर गलत हो जाएगा।

-1

आप चरों के मान बनाए रखने के लिए सत्र या viewstate उपयोग कर सकते हैं ..

  1. यदि आप एक अन्य पृष्ठ पर रीडायरेक्ट करना चाहते हैं, उपयोग सत्र []
  2. बाकी
  3. आप एक ही पर रहना चाहते हैं पेज, व्यूस्टेट का उपयोग करें []
संबंधित मुद्दे