2011-09-30 17 views
6

मैं बहुत की तरह एक विधि को फोन करके Javscript साथ एक UpdatePanel ताज़ा कर रहा हूँ:__doPostBack() के बाद कॉलबैक?

reloadDropDown = function (newValue) 
{ 
    __doPostBack("DropDown1", ""); 
    selectNewValueInDropDown(newValue); 
} 

मेरी UpdatePanel के अंदर एक <select> बॉक्स है कि मैं एक newValue के साथ एक <option> चयन करने की आवश्यकता है। मेरी समस्या यह है कि selectNewValueInDropDown विधि को पूरा करने से __doPostBack से पहले कहा जा रहा है। क्या कोई तरीका है कि मैं अपनी selectNewValueInDropDown विधि को कॉल करने से पहले पोस्टबैक के लिए "प्रतीक्षा" कर सकता हूं?

reloadDropDown = function (newValue) 
{ 
    var requestManager = Sys.WebForms.PageRequestManager.getInstance(); 

    function EndRequestHandler(sender, args) { 
     // Here's where you get to run your code! 
     selectNewValueInDropDown(newValue); 

     requestManager.remove_endRequest(EndRequestHandler); 
    } 
    requestManager.add_endRequest(EndRequestHandler); 

    __doPostBack("DropDown1", ""); 
} 
बेशक

, तो आप शायद दौड़ की स्थिति जहां दो अनुरोध ओवरलैप हैंडल करना चाहते हैं:

उत्तर

11

मेरी टिप्पणी अधिक ठोस बनाने के लिए, यहाँ विचार है। इसे संभालने के लिए, आपको ट्रैक रखने की आवश्यकता होगी कि कौन सा हैंडलर किस अनुरोध के लिए है। आप सर्वर पक्ष पर ScriptManager.RegisterDataItem जैसे कुछ का उपयोग कर सकते हैं, या args.get_panelsUpdated() पर कॉल करें और यह देखने के लिए जांचें कि क्या आप जिस पैनल में रुचि रखते हैं उसे अपडेट किया गया था।

+0

बहुत बढ़िया। धन्यवाद! – RayLoveless

6
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler); 
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 
function BeginRequestHandler(sender, args) 
{ 
    // 
} 
function EndRequestHandler(sender, args) 
{ 
    //request is done 
} 
+0

लेकिन मेरा पैरामीटर कब खेलेंगे? मुझे भी एक एंट्री पॉइंट विधि की आवश्यकता होगी। –

+0

आपको जावास्क्रिप्ट के साथ चालाक होना होगा और अपनी विधि को आग लगने के बारे में जानने के लिए कुछ राज्य चर सेट करना होगा। जब आप ढांचे/प्रक्रिया को हाइजैक करते हैं तो यह आपके ऊपर है। –

+0

@BrianDavidBerman: आप एक ऐसा फ़ंक्शन लिख सकते हैं जो 'selectNewValueInDropDown (newValue)' कहता है, फिर 'Sys.WebForms ... remove_endRequest (theFunction)' को ईवेंट ईवेंट हैंडलर के रूप में हटाने के लिए कॉल करता है। –

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