Callback after __doPostBack()?

2019-01-24 13:45发布

问题:

I am refreshing an UpdatePanel with Javscript by calling a method like so:

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

Inside my UpdatePanel is a <select> box that I need to select an <option> with a newValue. My problem is that my selectNewValueInDropDown method is being called prior to the __doPostBack from completing. Is there a way I can "wait" for the postback before calling my selectNewValueInDropDown method?

回答1:

To make my comment more concrete, here's the 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", "");
}

Of course, you probably want to handle race conditions where two requests overlap. To handle that, you would need to keep track of which handler is for which request. You could use something like ScriptManager.RegisterDataItem on the server side, or call args.get_panelsUpdated() and check to see if the panel you're interested it was updated.



回答2:

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
}