2012-08-03 22 views
5

तो मैं कुछ JavaScript फ़ंक्शन के बाद मेरे UpdatePanel अद्यतन किया जाता है चलाना चाहते हैं, तो मैं है:UpdatePanel के बाद क्यों मेरी समारोह चलता है कई बार भरी हुई है

function pageLoad() { 

    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_pageLoaded(panelLoaded); 
} 


function panelLoaded(sender, args) { 
     alert("foobar"); 
} 
ऊपर कोड के साथ

, अगर मैं पैनल एक अद्यतन समय, "foobar" एक बार सतर्क किया जाएगा; अगर मैं दूसरी बार पैनल को अद्यतन करता हूं, तो "foobar" दो बार पॉप हो जाएगा; तीसरी बार जब मैं पैनल को अद्यतन करने के लिए ट्रिगर करता हूं, तो "foobar" तीन बार पॉप अप होता है ... 4 वें समय 4 बार इतनी बार और इतनी आगे पॉप ...

इसका क्या कारण है ??

धन्यवाद ~~~

+1

ऐसा लगता है कि आप इसे lprm.add_pageLoaded (panelLoaded) l में बार-बार जोड़ रहे हैं। यह संभवत: पीआरएम से कभी नहीं हटाया जाता है और प्रत्येक बार जब आप पृष्ठ को लॉज कर रहे होते हैं तो यह एक नया उदाहरण जोड़ रहा है। वहां ब्रेकपॉइंट सेट करने का प्रयास करें और देखें कि कितने पैनल लोडेड कॉल prm में हैं। क्या prm में remove_pageLoaded() है; विकल्प? – Sam

+0

धन्यवाद, आप सही जगह पर हैं, यह Sys.WebForms.PageRequestManager.getInstance() है। Remove_pageLoaded (पैनल लोडेड); – eastboundr

+0

मदद करने के लिए खुशी हुई! आपकी बाकी परियोजना के साथ शुभकामनाएँ। – Sam

उत्तर

1

धन्यवाद सब, समस्या का उल्लेख सैम के रूप में बहुत से prm उदाहरण होने लगता है। मैंने Sys.WebForms.PageRequestManager.getInstance() को हटा दिया। Remove_pageLoaded (पैनल लोडेड); चेतावनी के बाद() और सब कुछ अच्छा है।

3

इसका कारण यह है Pageload UpdatePanel पोस्टबैक के दौरान भी क्रियान्वित किया जाता है। एक आसान समाधान है:

function pageLoad(sender, eventArgs) { 
    // If this is being executed by ajax 
    if (eventArgs) { 
     // And this is only a partial load 
     if (eventArgs.get_isPartialLoad()) { 
      // Don't perform any further processing 
      return; 
     } 
    } 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_pageLoaded(panelLoaded); 
} 
0

यह हो रहा है। pageLoad मूल रूप से Application.Init और PageRequestManager.EndRequest के संयोजन के रूप में कार्य करता है। इसका मतलब है कि यह एप्लिकेशन प्रारंभ (लगभग डीओएम तैयार) पर और प्रत्येक Partial PostBack

पर काम करता है तो पेज लोड सभी पोस्टबैक पर काम करता है; पूर्ण और आंशिक।

अब आप स्क्रिप्ट मैनेजर के उदाहरण पर स्क्रिप्ट मैनेजर के उदाहरण पर दो आंशिक पोस्टबैक पर बार-बार इस व्यवहार को जन्म दे रहे हैं।