2011-09-30 25 views
6

sto rinfrescante un UpdatePanel con javscript chiamando un metodo in questo modo:Richiamata dopo __doPostBack()?

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

Dentro il mio UpdatePanel è una scatola <select> che ho bisogno di selezionare un <option> con un newValue. Il mio problema è che il mio metodo selectNewValueInDropDown viene chiamato prima del completamento di __doPostBack. C'è un modo per "aspettare" il postback prima di chiamare il mio metodo selectNewValueInDropDown?

risposta

11

Per rendere il mio commento più concreto, ecco l'idea:

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", ""); 
} 

Naturalmente, probabilmente desidera gestire condizioni di gara in cui due richieste si sovrappongono. Per gestirlo, è necessario tenere traccia di quale gestore è per quale richiesta. È possibile utilizzare qualcosa come ScriptManager.RegisterDataItem sul lato server o chiamare args.get_panelsUpdated() e verificare se il pannello che ti interessa è stato aggiornato.

+0

Fantastico. Grazie! – 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

Ma dove entrerebbe in gioco il mio parametro? Avrei anche bisogno di un metodo di ingresso singolo. –

+0

Dovrai diventare furbo con JavaScript e impostare alcune variabili di stato per sapere quando attivare il tuo metodo. Quando dirottate il framework/processo è su di voi. –

+0

@BrianDavidBerman: è possibile scrivere una funzione che chiama 'selectNewValueInDropDown (newValue)' quindi chiama 'Sys.WebForms ... remove_endRequest (theFunction)' per rimuovere se stesso come gestore di eventi. –

Problemi correlati