先简单介绍下客户端生命周期 和 Sys.WebFroms.PageRequestManager类
cs类代码:
PageRequestManager类中的一些重要方法和属性:
1,getInstance静态方法 --获得全局唯一的PageRequestManager实例
2,IsInAsyncPostBack属性 --是否正处在一个异步更新过程
3,abortPostBack方法 --取消当前异步更新(多次取消不会产生异常,没有调用异步刷新也不会产生异常)
客户端生命周期:
Sys.Application和PageRequestManager共同形成了客户端的生命周期
PageRequestManager
异步刷新的时候触发的事件:initializeRequest
beginRequest
pageLoading
pageLoaded
endRequest
进入页面 --->PageRequestManger-pageLoaded事件 --->Application -init事件 --->Application-load事件
离开页面 ---> pageUnload方法-->Application- unload事件
发起一个异步更新
PageRequestManager-initializeRequest事件 ---> PageRequestManager-beginRequest事件--->正常提交到服务器--->PageRequestManager pageLoading事件--->PageRequestManager -pageLoaded事件 ---> Application-Load事件 --->PageLoad方法 --->PageRequestManager-endRequest事件
PageRequestManager-initializeRequest事件 --->PageRequestManager-beginRequest事件---> 如果错误/超时/取消 直接调用 --->PageRequestManager-endRequest事件
Application-init事件
只在页面第一次初始化时触发,触发时候所有脚本已经加载完毕,组建还没有开始创建,用于创建各种组建
Application -load事件 参数(sender Sys.ApplicationLoadEventArgs)
Sys.ApplicationLoadEventArgs参数有俩个重要属性:
1,components 属性 获得此次家在阶段中所有建立的对象
2,isPartialLoad属性 是否为异步调用导致页面加载,类似页面的IsPostBack属性
Application-unload事件 资料上说用于通知 (没有用过)
PageRequestManager --initializeRequst事件 (
sender,InitializeRequestEventArgs)
参数InitializeRequestEventArgs 的 属性:request 属性 用于获得WedRequest对象
postBackElement属性 触发异步属性的dom元素
这个事件的常用操作:
--读取请求信息(request属性) 和 取消此次异步更新(默认情况下,新发出的请求会取消掉上次的异步刷新请求)
PageRequestManager --initializeRequst事件 的例子:异步请求的优先级别
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm4.aspx.cs" Inherits="AJAXEnabledWebApplication1.WebForm4" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server">
- <title>无标题页</title>
- </head>
- <body>
- <form id="form1" runat="server">
- <asp:ScriptManager ID="ScriptManager1" runat="server">
- </asp:ScriptManager>
- <asp:UpdateProgress ID="UpdateProgress1" runat="server">
- <ProgressTemplate>
- <div style="color:Red">Loading......</div>
- </ProgressTemplate>
- </asp:UpdateProgress>
- <br />
- <asp:UpdatePanel ID="UpdatePanel1" runat="server">
- <ContentTemplate>
- <%=DateTime.Now.ToString() %><br />
- <asp:Label ID="Label1" runat="server"></asp:Label><br />
- <asp:Button ID="btnFirst" runat="server" Text=" 优先异步刷新清秀" />
- <asp:Button ID="btnCommen" runat="server" Text="普通异步刷新请求" />
- </ContentTemplate>
- </asp:UpdatePanel>
- <div id="message" style="color:Red"></div>
- <script type="text/javascript" language="javascript">
- var timeoutSeed=null;
- function showMessage(message,timeout){
- $get("message").innerHTML=message;
- if(timeoutSeed){
- window.clearTimeout(timeoutSeed);
- }
- timeout=window.setTimeout(
- function(){$get("message").innerHTML="";},timeout || 2500);
- }
- //-------------------------------------------------------------------------------------------------------
- //设置一个全局变量用来保存上次请求的buttonID
- var lastPostBackButton=null;
- //保存优先级别高的buttonID
- var btnFirsId="<%=this.btnFirst.ClientID %>";
- //Sys.WebForms.PageRequestManager.getInstance()获取唯一的PageRequestManager实例
- Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(
- function(sender,e){
- //获得实例
- var param=Sys.WebForms.PageRequestManager.getInstance();
- //判断是否正在一个异步刷新中(get_isInAsyncPostBack()为true则存在异步刷新)
- if(param.get_isInAsyncPostBack()){
- //如果上次异步刷新为优先级别高的刷新
- if(lastPostBackButton==btnFirsId){
- //取消此次异步刷新
- e.set_cancel(true);
- // 如果此次异步刷新请求的buttonID是优先的
- if(e.get_postBackElement().id==btnFirsId){
- showMessage("不可重复发起优先的异步刷新请求");
- }else{
- showMessage("请等待上次优先的异步刷新请求结束");
- }
- return;
- }
- //上次的异步刷新不是优先的异步刷新,判断此次的刷新是否是优先的
- else if(e.get_postBackElement().id==btnFirsId){
- //如果是优先的异步刷新,不做任何操作,默认会取消上一次的异步刷新
- showMessage("新发起优先的异步刷新请求,普通的异步刷新请求将被取消");
- }else{
- //此次异步刷新请求为普通,上次也为普通,上次的将被取消
- showMessage("重新发起普通的异步刷新请求,上次的异步刷新请求将被取消");
- }
- }
- lastPostBackButton=e.get_postBackElement().id;
- }
- );
- //-------------------------------------------------------------------------------------------------------
- </script>
- </form>
- </body>
- </html>
- using System;
- using System.Collections;
- using System.Configuration;
- using System.Data;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- namespace AJAXEnabledWebApplication1
- {
- public partial class WebForm4 : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- this.btnFirst.Click+=new EventHandler(btn_Click);
- this.btnCommen.Click+=new EventHandler(btn_Click);
- }
- protected void btn_Click(object sender, EventArgs e)
- {
- System.Threading.Thread.Sleep(3000);
- Button btn = sender as Button;
- Label1.Text = string.Format("你点击了<{0}>按钮",btn.Text);
- }
- }
- }
先记录这些,其他事件下篇文章中介绍~