View Code
ScriptManager和UpdatePanel两个控件已经能够实现了客户端与服务器端的异步通信了。要想对异步操作进一步控制的话,那我们还得进一步研究PageReqeustManager类。 PageRequestManager类是客户端的类,用于协调ScriptManager和UpdatePanel控件,管理页面上的异步更新操作。通过PageRequestManager客户端的实例我们可以深入到在客户端页面生命周期中,更细致地操作客户端的页面。 一、PageRequestManager实例: 要想在客户端获得PageRequestManager实例,页面上必须拥有一人ScriptManager控件,并且ScriptManager控件的EnablePartialRendering属性必须设为True。 只要页面上内含一个EnablePartialRendering属性为True的ScriptManager控件,该页面就会自动创建一个PageRequestManager实例。程序员不需要自行创建PageRequestManager实例,直接取来用即可。 取得PageRequestManager实例的代码: var prm = Sys.WebForms.PageRequestManager.getInstance(); 属性prm.get_isInAsyncPostBack():判断一个异步回送是否正在进行中。 方法prm.abortPostBack():把一个正在执行中的异步回送取消。 二、客户端页面的生命周期: PageRequestManager类的优势就是能够让程序员深入至客户端页面的生命周期中去。所以要想充分发挥PageRequestManager类的功能,那首先要了解异步页的生命周期。 1、initializeRequest: 触发时机:当一个异步请求的回送被初始化之前引发。 添加事件处理代码:Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initFunc); 移除事件处理代码:Sys.WebForms.PageRequestManager.getInstance().remove_initializeRequest(initFunc); initFunc是该页面初始化之前要执行的客户端方法。该方法的声明为: function initFunc(sender,args) { //args的数据类型是:InitializeRequestEventArgs类型。 //args.get_postBackElement():取得初始化异步回送的元素对象。 //args.get_postBackElement().id取得初始化异步回送的元素对象的id号 //args.get_postBackElement().value取得初始化异步回送的元素对象的value值 //args.set_cancel(bool):取消初始化异步回送,即丢弃该异步回送。 } 如果异步处理的过程比较慢,在异步处理的过程中再次发出同样的请求的话,那后者的异步处理请求会取消掉前一步未处理完的请求。这就是默认的异步请求优先级--“后者优先”。 我们通常回利用initailizeRequest事件来取消一个异步回送(正在进行的回送和将要初始化的回送)。 2、beginRequest: 触发时机:在异步请求初始化完成,且向服务器提出请求之前引发。 添加事件处理代码:Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginFunc); 移除事件处理代码:Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(beginFunc); beginFunc是向服务器提出请求之前要执行的客户端方法。该方法的声明为: function beginFunc(sender,args) { //args的数据类型是:BeginRequestEventArgs类型。 //args.get_postBackElement():取得初始化异步回送的元素对象。 } 我们通常在beginRequest事件中设置一个标头,或是启始化一个动化告知用户正在进行请求处理。 3、pageLoading: 触发时机:异步回送已经被服务器接收并响应,但还没有对页面进行任何更新之前引发 添加事件处理代码:Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(loadingFunc); 移除事件处理代码:Sys.WebForms.PageRequestManager.getInstance().remove_pageLoading(loadingFunc); loadingFunc是页面更新之前要执行的客户端方法。该方法的声明为: function loadingFunc(sender,args) { //args的数据类型是:PageLoadingEventArgs类型。 //args代表内容将要被更新或删除的UpdatePanel控件的<div>。 //var arr = args.get_panelsDeleting(); 取得将被删除的各个UpdatePanel控件的<div> //var arr = args.get_panelsUpdating();取得将被更新的各个UpdatePanel控件的<div> } 4、pageLoaded: 触发时机:回送完成页面区域被更新之后引发。 添加事件处理代码:Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(loadedFunc); 移除事件处理代码:Sys.WebForms.PageRequestManager.getInstance().remove_pageLoaded(loadedFunc); loadedFunc是页面更新后要执行的客户端方法。该方法的声明为: function loadedFunc(sender,args) { //args的数据类型是:PageLoadedEventArgs类型 //args代表更新的或创建的UpdatePanel控件的<div> //var arr = args.get_panelsUpdated();取得被更新的各个UpdatePanel控件的<div> //var arr = args.get_panelsCreated();取得新创建的各个UpdatePanel控件的<div> } 5、endRequest: 触发时机:回送请求处理完毕后,就会引发endRequest事件。 添加事件处理代码:Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endFunc); 移除事件处理代码:Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(endFunc); endFunc是页面请求完成后执行的客户端方法。该方法的声明为: function endRequest(sender,args) { //args的数据类型是:EndRequestEventArgs类型 //var err = args.get_error():判断是否发生错误,并取得错误对象。 //var em = args.get_error().message:取得错误的出错信息。 //args.set_errorHandled(true):设置错误已被处理。 //var gm = args.get_errorHandled():判断错误是否被处理。 //异步请求发生异常后,如果程序员不在客户端捕获处理的话,PageRequestManager对象会将其以对话框的形式弹出异常的信息。如果程序员想自己编写错误处理代码,而不交由PageRequestManager对象处理的话。那程序员可以通过args.get_error().message属性取得错误信息,然后编写异常处理代码,最后记得执行args.set_errorHandled(true)。这样就阻止异常继续回返给PageRequestManager对象。具体使用在后面将详细说明。 } 三、案例: 1、异步回送的优先级-后者的优先级高于前者: 如果处理异步回送用的时间很长的话,那么在处理第一个回送的过程中,客户端又产生第二次异步回送的话话,那后引发的回送回取消先引发的回送。 页面上有两个异步按钮,产生异步回送,为了拉长服务器端处理回送的时间,我分别在两个按钮的服务器click事件中使用线程休眠了10秒和5秒,然后再向lblInfo标签中输入处理结果。 <asp:Button ID="btnLong" runat="server" Text="10秒后产生响应" OnClick="btnLong_Click" /> <asp:Button ID="btnShort" runat="server" Text="5秒后产生响应" OnClick="btnShort_Click" /> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Label ID="lblInfo" runat="server" BackColor="#C0C0FF" Width="100%"></asp:Label> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="btnLong" EventName="Click" /> <asp:AsyncPostBackTrigger ControlID="btnShort" EventName="Click" /> </Triggers> </asp:UpdatePanel> 为了让大家看清楚后一步引发会取消掉前一步的引发,我在PageRequestManager对象中加入了beginRequest事件处理代码,在发送请求前在页面上显示请求发送者 。 var prm = Sys.WebForms.PageRequestManager.getInstance(); prm.add_beginRequest(beginR); function beginR(sender,args) { var d = $get("lblInfo"); var t = args.get_postBackElement().value; d.innerHTML = "正在处理同"+t+"引发的回送"; } 服务器端的代码: protected void Page_Load(object sender, EventArgs e) { ScriptManager1.RegisterAsyncPostBackControl(this.btnLong); ScriptManager1.RegisterAsyncPostBackControl(this.btnShort); } protected void btnLong_Click(object sender, EventArgs e) { System.Threading.Thread.Sleep(10000); lblInfo.Text = ((Button)sender).Text + "产生的响应"; } protected void btnShort_Click(object sender, EventArgs e) { System.Threading.Thread.Sleep(5000); lblInfo.Text = ((Button)sender).Text + "产生的响应"; } 效果:当点击"10秒后产生响应"按钮的时候,在lblInfo中会显示"正在处理同10秒后产生响应引发的回送",如果此时你再点击"5秒后产生响应"按钮的时候,lblInfo的显示会变成"正在处理同5秒后产生响应引发的回送"。此时第一次引发的回送回被取消,等待5后页面上会显示出"5秒后产生响应产生的响应",并不出现第一次回送的服务器响应。 2、取消异步回送: 取消异步回送分两种: a. 取消自在执行的异步回送-通过调用PageRequestManager对象的abortPostback()方法来取消。 b. 取消新产生的异点回送-通过设置InitializeRequestEventArgs对象的cancel属性为true来取消。 下面是一个查询汽车信息的界面,为了拉长服务器的处理时间,我在查询按钮中加入了6秒中的休眠时间。 在点击查询的时候,为了不让用户干等,我加入了一个<div>,提示用户请求正在处理中,在<div>中加入一个"取消"按钮,当用户点击 "取消"按钮的时候,可以中止服务器端的异步处理。 等到服务器处理完毕异步请求后显示下面的界面 如果在服务器未处理完异步请求时,用户再点击"查询"按钮,做到防止后引发的回送冲掉第一次引发的回送,并在界面中加入提示信息。 界面设计: HTML代码如下: <asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackErrorMessage="这是一个自定义的小异常"> </asp:ScriptManager> <asp:DropDownList ID="ddl" runat="server" DataSourceID="SqlDataSource1" DataTextField="prod_name" DataValueField="prod_code" Width="194px"> </asp:DropDownList> <asp:Button ID="Button1" runat="server" Text="查询" OnClick="Button1_Click" /> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:mydbConnectionString %>" SelectCommand="SELECT [prod_code], [prod_name] FROM [productor]"></asp:SqlDataSource> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <div id="divInfo" style="background-color: #ff99ff; display: none;"> <asp:Button ID="btnCancel" runat="server" Text="取消" /></div> <br /> <asp:GridView ID="list" runat="server" Width="100%" DataSourceID="SqlDataSource2"> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource2" runat="server" > </asp:SqlDataSource> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> </Triggers> </asp:UpdatePanel> CS代码如下: protected void Page_Load(object sender, EventArgs e) { ScriptManager1.RegisterAsyncPostBackControl(this.Button1); } protected void Button1_Click(object sender, EventArgs e) { System.Threading.Thread.Sleep(6000); string str = WebConfigurationManager.ConnectionStrings["mydbConnectionString"].ToString(); SqlDataSource2.ConnectionString = str; SqlDataSource2.SelectCommand = "select car.ids,car.name,car.price,brand.brand_name,prod_code from car join brand on car.brand=brand_code where prod_code=@p"; SqlDataSource2.SelectParameters.Clear(); SqlDataSource2.SelectParameters.Add("p",ddl.SelectedValue); SqlDataSource2.Select(DataSourceSelectArguments.Empty); } 客户端JS代码的实现: var prm = Sys.WebForms.PageRequestManager.getInstance(); //取得PageRequestManager对象的实例 prm.add_initializeRequest(init); //添加对象初始化事件处理程序 function init(sender,args) //事件处理程序 { //如果在异步处理过程中,点击了"取消"按钮的话,就中止正在处理的异步处理 。 if(prm.get_isInAsyncPostBack() && args.get_postBackElement().id=="btnCancel") { prm.abortPostBack(); //中止异步处理 } //如果在异步处理过程中,又点击了一次"查询"按钮的话,就取消新的请求。 else if(prm.get_isInAsyncPostBack() && args.get_postBackElement().id=="Button1") { args.set_cancel(true); //取消新的请求 var d = $get("divInfo"); d.style.display = ""; d.innerHTML += "<br>仍然正在请求中,请稍候"; } //如果没有异步处理正在执行,用户点击了"查询"按钮的话,就显示"正在请求中,请稍候" else if(!prm.get_isInAsyncPostBack() && args.get_postBackElement().id=="Button1") { var d = $get("divInfo"); d.style.display = ""; d.innerHTML += "<br>正在请求中,请稍候"; } } 3、异步请求自定义的错误处理。 在异步请求处理中如果产生错误,系统默认会弹一个浏览的对话框,告诉用户的出错信息。有时候我们并不想用这种默认的异常处理界面,那如何处理呢? 实现步骤: a、编写ScriptManager对象的服务器端事件ScriptManager1_AsyncPostBackError代码,把捕获的错误信息赋给ScriptManager对象的AsyncPostBackErrorMessage属性。 b、添加PageRequestManager对象的endRequest事件处理程序。在处理程序中用args.get_error().message取出运行中的错误信息。然后在指定的<Div >中把错误信息显示出来。 c、用set_errorHandled(true)把错误对象标记为已处理,防止错误对象继续冒泡给浏览器。 界面: HTML代码: <asp:ScriptManager ID="ScriptManager1" runat="server" OnAsyncPostBackError="ScriptManager1_AsyncPostBackError"> </asp:ScriptManager> <br /> <asp:Button ID="btnOK" runat="server" OnClick="btnOK_Click" Text="成功送出" /> <asp:Button ID="btnError" runat="server" OnClick="btnError_Click" Text="送出失败" /></div> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Label ID="lblInfo" runat="server" BackColor="#C0C0FF" Width="100%"></asp:Label> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="btnError" EventName="Click" /> <asp:AsyncPostBackTrigger ControlID="btnOK" EventName="Click" /> </Triggers> </asp:UpdatePanel> CS代码: protected void Page_Load(object sender, EventArgs e) { ScriptManager1.RegisterAsyncPostBackControl(btnOK); ScriptManager1.RegisterAsyncPostBackControl(btnError); } protected void btnOK_Click(object sender, EventArgs e) { lblInfo.Text = "异步回送成功"; } protected void btnError_Click(object sender, EventArgs e) { Exception ex = new Exception("这是一个自定义的用户异常信息"); throw ex; } protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e) { ScriptManager1.AsyncPostBackErrorMessage += e.Exception.Message; } 客户端JS代码: var prm = Sys.WebForms.PageRequestManager.getInstance(); prm.add_endRequest(endfunc); function endfunc(sender,args) { if(args.get_error() != null) { var em = args.get_error().message; args.set_errorHandled(true); $get("lblInfo").innerHTML = em; } }
initializeRequest
View Code
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected void ButtonClick_Handler(object sender, EventArgs e) { System.Threading.Thread.Sleep(3000); } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>PageRequestManager initializeRequest Example</title> <style type="text/css"> body { font-family: Tahoma; } a { text-decoration: none; } a:hover { text-decoration: underline; } div.UpdatePanelStyle{ width: 300px; height: 300px; } div.AlertStyle { font-size: smaller; background-color: #FFC080; height: 20px; visibility: hidden; } div.Container { display: inline; float: left; width: 330px; height: 300px; } </style> </head> <body> <form id="form1" runat="server"> <div> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <script type="text/javascript" language="javascript"> var divElem = 'AlertDiv'; var messageElem = 'AlertMessage'; Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(CheckStatus); function CheckStatus(sender, args) { var prm = Sys.WebForms.PageRequestManager.getInstance(); if (prm.get_isInAsyncPostBack() & args.get_postBackElement().id == 'CancelRefresh') { prm.abortPostBack(); } else if (prm.get_isInAsyncPostBack() & args.get_postBackElement().id == 'RefreshButton') { args.set_cancel(true); ActivateAlertDiv('visible', 'Still working on previous request.'); } else if (!prm.get_isInAsyncPostBack() & args.get_postBackElement().id == 'RefreshButton') { ActivateAlertDiv('visible', 'Processing....'); } } function ActivateAlertDiv(visString, msg) { var adiv = $get(divElem); var aspan = $get(messageElem); adiv.style.visibility = visString; aspan.innerHTML = msg; } </script> <div class="Container" > <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="Server" > <ContentTemplate> <asp:Panel ID="Panel1" runat="server" GroupingText="UpdatePanel" CssClass="UpdatePanelStyle"> Last update: <%=DateTime.Now.ToString() %>. <asp:Button runat="server" ID="RefreshButton" Text="Refresh" OnClick="ButtonClick_Handler" /> <div id="AlertDiv" class="AlertStyle"> <span id="AlertMessage"></span> <asp:LinkButton ID="CancelRefresh" runat="server">cancel</asp:LinkButton> </div> </asp:Panel> </ContentTemplate> </asp:UpdatePanel> </div> </div> </form> </body> </html>
beginRequest
View Code
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected void ProcessClick_Handler(object sender, EventArgs e) { System.Threading.Thread.Sleep(2000); } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>PageRequestManager beginRequest Example</title> <style type="text/css"> body { font-family: Tahoma; } div.AlertStyle { background-color: #FFC080; top: 95%; left: 1%; height: 20px; width: 270px; position: absolute; visibility: hidden; } </style> </head> <body> <form id="form1" runat="server"> <div> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <script type="text/javascript" language="javascript"> 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> <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="Server"> <ContentTemplate> <asp:Panel ID="Panel1" runat="server" GroupingText="Update Panel"> Last update: <%= DateTime.Now.ToString()%>. <br /> <asp:Button runat="server" ID="Button1" Text="Process 1" OnClick="ProcessClick_Handler" /> <asp:Button runat="server" ID="Button2" Text="Process 2" OnClick="ProcessClick_Handler" /> </asp:Panel> </ContentTemplate> </asp:UpdatePanel> <div id="AlertDiv" class="AlertStyle"> </div> </div> </form> </body> </html>
pageLoading
pageLoaded
View Code
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected void LinkButton_Click(object sender, EventArgs e) { TextBox1.Text = DateTime.Now.ToString(); } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>PageRequestManager pageLoaded Event Example</title> <style type="text/css"> body { font-family: Tahoma; } .FieldSetStyle { width: 300px; height: 100px; } .UpdatePanelContainer { width: 330px; height:110px; } </style> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <script type="text/javascript"> Type.registerNamespace("ScriptLibrary"); ScriptLibrary.BorderAnimation = function(color, duration) { this._color = color; this._duration = duration; } ScriptLibrary.BorderAnimation.prototype = { animatePanel: function(panelElement) { var s = panelElement.style; s.borderWidth = '1px'; s.borderColor = this._color; s.borderStyle = 'solid'; window.setTimeout( function() {{ s.borderWidth = 0; }}, this._duration ); } } ScriptLibrary.BorderAnimation.registerClass('ScriptLibrary.BorderAnimation', null); var panelUpdatedAnimation = new ScriptLibrary.BorderAnimation('blue', 1000); var postbackElement; Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginRequest); Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded); function beginRequest(sender, args) { postbackElement = args.get_postBackElement(); } function pageLoaded(sender, args) { var updatedPanels = args.get_panelsUpdated(); if (typeof(postbackElement) === "undefined") { return; } else if (postbackElement.id.toLowerCase().indexOf('external') > -1) { for (i=0; i < updatedPanels.length; i++) { panelUpdatedAnimation.animatePanel(updatedPanels[i]); } } } </script> <p> <asp:LinkButton ID="ExternalButton" runat="server" OnClick="LinkButton_Click"> Update the panel with animation. </asp:LinkButton> </p> <hr /> <div class="UpdatePanelContainer"> <asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional"> <Triggers> <asp:AsyncPostBackTrigger ControlID="ExternalButton" /> </Triggers> <ContentTemplate> <fieldset id="FieldSet1" class="FieldSetStyle" runat="server"> <legend>UpdatePanel</legend> <asp:TextBox runat="server" ID="TextBox1" /> <br /> <asp:LinkButton ID="InternalButton" runat="server" OnClick="LinkButton_Click"> Update the panel with no animation. </asp:LinkButton> </fieldset> </ContentTemplate> </asp:UpdatePanel> </div> </form> </body> </html>
endRequest
View Code
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected void ErrorProcessClick_Handler(object sender, EventArgs e) { // This handler demonstrates an error condition. In this example // the server error gets intercepted on the client and an alert is shown. Exception exc = new ArgumentException(); exc.Data["GUID"] = Guid.NewGuid().ToString(); throw exc; } protected void SuccessProcessClick_Handler(object sender, EventArgs e) { // This handler demonstrates no server side exception. UpdatePanelMessage.Text = "The asynchronous postback completed successfully."; } protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e) { if (e.Exception.Data["GUID"] != null) { ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message + " When reporting this error use the following ID: " + e.Exception.Data["GUID"].ToString(); } else { ScriptManager1.AsyncPostBackErrorMessage = "The server could not process the request."; } } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>PageRequestManager endRequestEventArgs Example</title> <style type="text/css"> body { font-family: Tahoma; } #AlertDiv{ left: 40%; top: 40%; position: absolute; width: 200px; padding: 12px; border: #000000 1px solid; background-color: white; text-align: left; visibility: hidden; z-index: 99; } #AlertButtons{ position: absolute; right: 5%; bottom: 5%; } </style> </head> <body id="bodytag"> <form id="form1" runat="server"> <div> <asp:ScriptManager ID="ScriptManager1" OnAsyncPostBackError="ScriptManager1_AsyncPostBackError" runat="server" /> <script type="text/javascript" language="javascript"> var divElem = 'AlertDiv'; var messageElem = 'AlertMessage'; var bodyTag = 'bodytag'; Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); function ToggleAlertDiv(visString) { if (visString == 'hidden') { $get(bodyTag).style.backgroundColor = 'white'; } else { $get(bodyTag).style.backgroundColor = 'gray'; } var adiv = $get(divElem); adiv.style.visibility = visString; } function ClearErrorState() { $get(messageElem).innerHTML = ''; ToggleAlertDiv('hidden'); } function EndRequestHandler(sender, args) { if (args.get_error() != undefined) { var errorMessage = args.get_error().message; args.set_errorHandled(true); ToggleAlertDiv('visible'); $get(messageElem).innerHTML = errorMessage; } } </script> <asp:UpdatePanel runat="Server" UpdateMode="Conditional" ID="UpdatePanel1"> <ContentTemplate> <asp:Panel ID="Panel1" runat="server" GroupingText="Update Panel"> <asp:Label ID="UpdatePanelMessage" runat="server" /> <br /> Last update: <%= DateTime.Now.ToString() %> . <br /> <asp:Button runat="server" ID="Button1" Text="Submit Successful Async Postback" OnClick="SuccessProcessClick_Handler" OnClientClick="ClearErrorState()" /> <asp:Button runat="server" ID="Button2" Text="Submit Async Postback With Error" OnClick="ErrorProcessClick_Handler" OnClientClick="ClearErrorState()" /> <br /> </asp:Panel> </ContentTemplate> </asp:UpdatePanel> <div id="AlertDiv"> <div id="AlertMessage"> </div> <br /> <div id="AlertButtons" > <input id="OKButton" type="button" value="OK" runat="server" onclick="ClearErrorState()" /> </div> </div> </div> </form> </body> </html>
Name |
说明 |
---|---|
初始化 Sys.WebForms.PageRequestManager 类 的新实例。 |
|
在异步回发处理启动,并且回发请求发送到服务器之前引发。 |
|
在异步回发完成,并且控制权返回到浏览器之后引发。 |
|
在异步回发的初始化期间引发。 |
|
在同步或异步回发引起页上所有内容刷新之后引发。 |
|
在收到服务器对异步回发的响应之后、页上任何内容更新之前引发。 |
|
停止所有因异步回发而导致的更新。 |
|
开始异步回发。 |
|
释放 ECMAScript (JavaScript) 资源并分离事件。 |
|
返回页面的 PageRequestManager 类的实例。 |
|
返回一个值,该值指示 PageRequestManager 对象是否正在处理回发。 |