Update Progress with AJAX UpdatePanel
Introduction
In this post, I will demonstrate how to create an update progress display with theUpdatePanel
, similar to the one that we can see in GMail, like the following:
The following key things are to be addressed:
- It should be on the top-center of the page.
- It should be on top of all the other HTML controls.
- When scrolling, it should be placed on a relative position to the current scroll position.
UpdatePanel
, I will use <div>
, CSS styles, and JavaScript.Here we go:
- Add a
div
tag within thebody
element.
<div class="divProg" id="divProg"></div>
Note that theid
andclass
attributes are necessary.
- Add the following CSS class to the web page or the style sheet file. Keep in mind, without
position: absolute; z-index: 10;
CSS properties, this won’t work as expected.
.divProg { position: absolute; left: 0px; top: 0px; width: 100px; height: 0px; z-index: 10; border: 1px none #000000; visibility: hidden; background-color: #FFF1A8; font-weight: bold; padding: 5px 10px 5px 10px; }
- Now we want to display the
div
on the top-center of the screen as well as move its top position relative to the current scroll position. To address this, we will create the following three JavaScript functions. To get the current Y position of scroll:
function getScroll_Y() { return document.documentElement.scrollTop; }
To set the current top position of thediv
:
function setDivTop() { if (document.getElementById("divProg") != null) { theDiv= document.getElementById("divProg"); } else { return; } theDiv.style.top = getScroll_Y() + "px"; }
Write a function to toggle the display for thediv
.
function displayDiv(display) { if (document.getElementById("divProg") != null) { theDiv = document.getElementById("divProg"); } else { return; } if (display) { var width = document.body.offsetWidth; var height = document.body.offsetHeight; if (!width) { width = window.innerWidth; height = window.innerHeight; if (!width) { width = screen.width; height = screen.height; } } // To center the div, we need to deduct its half of // width from half of screen width. So we set div width =100 // in css, so that deduct by 50 theDiv.style.left = width / 2 - 50; theDiv.style.top = getScroll_Y(); theDiv.style.height = 25; theDiv.innerText = 'Working...'; theDiv.style.visibility = 'visible'; } else { theDiv.style.visibility = 'hidden'; } }
- Now we want to handle the request start and request end events. We will be able to use the following code with the help of the AJAX Extension library.
// Requests Events // ============================================ var prm = Sys.WebForms.PageRequestManager.getInstance(); prm.add_initializeRequest(InitializeRequest); prm.add_endRequest(EndRequest); function InitializeRequest(sender, args) { if (prm.get_isInAsyncPostBack()) { args.set_cancel(true); } displayDiv(true); } function EndRequest(sender, args) { if (args.get_error()) { alert(args.get_error().message); args.set_errorHandled(true); } displayDiv(false); } //===============================================
See full details: http://www.codeproject.com/Articles/44162/Update-Progress-with-AJAX-UpdatePanel.aspx
Comments
http://ctrlcvprogrammer.blogspot.in/