PageRequestManager - ASP.NET Ajax

PageRequestManager - ASP.NET Ajax

PageRequestManager是ASP.NET Ajax用來管理非同步Client的操作方式,前陣子為了避免網頁重覆送出的問題,和同事們討論之後,決定利用「蓋玻璃」的方式,替整個網頁加上一層透明的DIV,防止User重覆按下送出的動作。

因為整個網站是採用ASP.NET Ajax開發,所以大部份的資料更新動作都是透過update panel來執行;因此,在回到server前,ajax會先呼叫一次

Sys.WebForms.PageRequestManager.getInstance().add_beginRequest()這個方法,等到update panel執行完成之後,會再呼叫一次

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(),所以可以透過這二個方式來達到效果建立及取消。

以下是截自官方網站的範例:

			Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
			Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
			function BeginRequestHandler(sender, args)
			{
				var elem = args.get_postBackElement();
				ActivateAlertDiv('visible', 'AlertDiv', elem.value + ' processing...');
			}
			function EndRequestHandler(sender, args)
			{
				ActivateAlertDiv('hidden', 'AlertDiv', '');
			}
			function ActivateAlertDiv(visstring, elem, msg)
			{
				var adiv = $get(elem);
				adiv.style.visibility = visstring;
				adiv.innerHTML = msg; 
			}
			</script>

 

不過為了讓user一按下按鈕就無法動作,所以效果開始這段我是寫在button的onclientclick上面,再利用add_endRequest來取消效果。

1.先在網頁上放置一個div

			<img alt="waiting" src="/App_Themes/images/indicator.gif" />
			Please wait a moment...
		</div>

2.再來是javascript的動作

先取到整個body的大小,然後把div放到跟body一樣大即可!

function EndRequestHandler(sender, args)
{
	showBusyContainer(false);
}
function showBusyContainer(show)
{  
	if(show==true)
	{
		Sys.UI.DomElement.toggleCssClass(document.body, "HiddenSelect");
		var bodyWidth = jQuery("body").outerWidth();
		var bodyHeight = Math.max(jQuery("body").outerHeight(), jQuery(window).height());
		var boxHeight = jQuery(".busybox").outerHeight();
		jQuery(".overlay").show()
			 .css({ width:bodyWidth, height:bodyHeight});
		jQuery(".busybox").show()
			 .css({ left: (bodyWidth - jQuery(".busybox").width()) / 2, position:"absolute", top:bodyHeight / 2 - boxHeight });
	}
	else
	{
		jQuery(".overlay").hide();
		jQuery(".busybox").hide();
		jQuery("body").removeClass("HiddenSelect");
	}
}

 

關於jQuery, Sys.WebForms.PageRequestManager Class

DotBlog 的標籤:,