I have a button on my webform. Clicking this button will do an HttpWebRequest during the onclick event handler. After the request we copy the response from the request into HttpContext.Current.Response and send that to the client.
This web request can take a while (up to 5 seconds, since it’s generating a report). During this time the user has no indication that anything is going on, except for the browser progress bar and the spinning IE icon (if they’re using IE). So I need a loading indicator while this is happening.
I’ve tried using javascript that fires during the button’s onclick event (using OnClientClick) and while that works, I don’t know how to find out when the web request is finished. Since we just send the response to the client, a full postback doesn’t happen.
I’ve tried wrapping the button in an UpdatePanel and using the UpdateProgress, but when we send the response to HttpContext.Current.Response and call Response.End(), we get an error in the javascript, since the response isn’t well formed (we’re sending back an excel sheet for the user to download).
Since we’re sending back a file for users to download, I don’t want to pop-up a separate window, since then in IE they’d get the information bar blocking the download.
Any ideas here?
As an alternative to the Professional AJAX.NET library, jQuery has a really nice way of doing this.
Take a look at this example of using a .NET PageMethod (if possible in your scenario).
You define a page method call in jQuery, you can tack on your loading… message in a hidden div.
Say what callback you want to return on success (ie when your 5 second report is generated) then hide the loading and handle the data.
Take a look at the javascript on my contact page for an example (view the source).