2011-09-30 14 views
6

ja odświeżania UpdatePanel z javscript wywołując metodę tak:Oddzwonienie po __doPostBack()?

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

Wewnątrz mojego UpdatePanel jest <select> pudełko, że muszę wybrać <option> z nowaWartość. Mój problem polega na tym, że moja metoda selectNewValueInDropDown jest wywoływana przed ukończeniem __doPostBack. Czy istnieje sposób, aby "poczekać" na oddzwonienie przed wywołaniem mojej metody selectNewValueInDropDown?

Odpowiedz

11

aby mój komentarz bardziej konkretne, oto pomysł:

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

Oczywiście, prawdopodobnie chcesz obsługiwać warunków wyścigu, gdzie nakładają się dwa wnioski. Aby sobie z tym poradzić, musisz śledzić, który program obsługi jest dla którego żądania. Możesz użyć czegoś takiego jak ScriptManager.RegisterDataItem po stronie serwera lub zadzwonić pod numer args.get_panelsUpdated() i sprawdzić, czy panel, który Cię interesuje, został zaktualizowany.

+0

Awesome. Dziękuję Ci! – 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

Ale gdzie mógłby wejść mój parametr? Potrzebowałbym również metody pojedynczego punktu wejścia. –

+0

Będziesz musiał postępować z JavaScript i ustawić pewne zmienne stanu, aby wiedzieć, kiedy strzelać twoją metodą. Kiedy przejmujesz frameworkt/proces, który jest na tobie. –

+0

@BrianDavidBerman: Mógłbyś napisać funkcję, która wywołuje 'selectNewValueInDropDown (newValue)' następnie wywołuje 'Sys.WebForms ... remove_endRequest (theFunction)', aby usunąć siebie jako program obsługi zdarzeń. –

Powiązane problemy