Juan Jimenez
Juan Jimenez

Reputation: 5862

How to get the id of Updatepanel which is about to start a postback

I need to get the id of the panel that is about to start a postback, so I have a generic way to block ui on this panel.

So far I have this function:

function BeginRequestHandler(sender, args) {
    $('#' + args.get_updatePanelsToUpdate()[0]).block({ message: null }); 
}

attached like this:

Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);

this works pretty well to get the id if control that causes partial postback is inside update panel, but if it is outside (using a trigger), args.get_updatePanelsToUpdate() is always null

I've seen this answer, but it wont work forme because function is fired after partial postback is complete, I need it before..

Thank you

Upvotes: 1

Views: 2263

Answers (2)

Juan Jimenez
Juan Jimenez

Reputation: 5862

So here's what I did:

created 2 functions to block (on partial postback begin) and unblock (on partial postback end):

    function BeginRequestHandler(sender, args) {
          $('#' +sender._postBackSettings.panelsToUpdate[0].ReplaceAll('$', '_')).block({ message: 'loading...' }); 
    }
    function EndRequestHandler(sender, args) {        
          $('#' + sender._postBackSettings.panelsToUpdate[0].ReplaceAll('$', '_')).unblock();
    }

Registered above functions on my page right after my script manager:

  <script type="text/javascript">
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
        Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
    </script>

Some conditions:

  • I'm using jquery UI block plugin but you should use what better fits your needs.
  • You update panels should have ClientIDMode="AutoID" if your using .NET 4.0 +
  • I used the following helper function cause js doesn't make a real replace all and to deal with asp net autoID's:

    String.prototype.ReplaceAll = function (stringToFind, stringToReplace) { var temp = this; var index = temp.indexOf(stringToFind); while (index != -1) { temp = temp.replace(stringToFind, stringToReplace); index = temp.indexOf(stringToFind); } return temp; }

Upvotes: 3

Roman
Roman

Reputation: 20246

If you just want to disable (or animate in some other way) the UpdatePanel, why not just use UpdatePanelAnimation? It provides you with the following hooks (not sure if that's the right word):

OnUpdating - Generic animation played as when any UpdatePanel begins updating
OnUpdated - Generic animation played after the UpdatePanel has finished updating (but only if the UpdatePanel was changed)

Upvotes: 0

Related Questions