当前位置:首页 > Asp.net Ajax 学习笔记5 UpdatePanel的使用(下)

Asp.net Ajax 学习笔记5 UpdatePanel的使用(下)

点击次数:1013  更新日期:2010-12-29
\n

PageRequestManager类


\n

PageRequestManager类处于Sys.WebForms命名空间下


\n

getInstance方法– 获得全局唯一的PageRequestManager实例


\n

isInAsyncPostBack属性– 是否正处在一个异步更新过程中


\n

abortPostBack方法– 取消当前的异步更新


\n

Sys._Application的事件
– init事件
– load事件
– unload事件


\n

PageRequestManager的事件
– 异步刷新时触发
– initializeRequest
– beginRequest
– pageLoading
– pageLoaded
– endRequest


\n

进入页面的事件顺序:PRM(PageRequestManager)


\n

PRM_pageLoaded事件→App_init事件→App_load事件→pageLoad方法


\n

离开页面的事件顺序


\n

pageUnload方法→App_unload事件


\n

发起异步提交的事件顺序


\n

PRM_initializeRequest事件→PRM_beginRequest事件


\n

服务器处理异步提交之后,页面处理事件


\n

PRM_pageLoading事件→PRM_pageLoaded事件→App_load事件→pageLoad方法→PRM_endRequest事件


\n


注意PRM_endRequest事件是错误/超时/取消时触发


\n

App – init事件
• 基于浏览器window.onload事件
• 只在页面第一次初始化时触发
• 所有脚本已经加载完毕
• 所有组件还没有开始创建
• 用于创建各种组件


\n

App – load与unload事件
• load事件
– 参数类型:Sys.ApplicationLoadEventArgs
• components属性:获得这次加载阶段中所有建立的
对象。
• isPartialLoad属性:是否为异步调用导致页面加载。
– 常用操作:
• 随意?无?
• unload事件
– 仅用于通知


\n

PRM – initializeRequest事件
• 参数类型:InitializeRequestEventArgs
– request属性:用于获得WebRequest对象(用
于请求的信息)
– postBackElement:触发异步刷新的DOM元素


\n

postBackElement的set_cancel方法用于取消这次异步回传提交。get_postBackElement方法得到异步回传提交的DOM元素


\n

使用PRM的add_initializeRequest方法添加此事件的处理器,参数为函数地址,函数的两个参数为request属性和postBackElement。此事件用于用户提交之前判断是否提交数据使用和在数据提交之前读取请求的数据


\n

PRM – beginRequest事件
• 参数类型:BeginRequestEventArgs
– request属性:用于获得WebRequest对象(用于请求的信息)
– postBackElement:触发异步刷新的DOM元素


\n

使用add_beginRequest方法给此事件添加事件处理器。此事件通常用于读取请求信息、改变请求方式、显示更新提示。


\n

PRM – pageLoading事件
• 参数类型:PageLoadingEventArgs
– dataItems属性:获得服务器端注册的数据项
– panelsDeleting属性:获得即将删除的UpdatePanel
– panelsUpdating属性:获得即将更新的UpdatePanel


\n

使用add_pageLoading方法给此事件添加事件处理器。此事件通常用于提示更新的UpdatePanel、获得服务器端注册的数据项。注意如果页面上有多个UpdatePanel,并且UpdatePanel里没有任何提交控件。在所有的UpdatePanel外有一个提交控件,并且在页面加载的时候注册成为一个异步回传控件。这时候点击这个提交控件,会发现多个UpdatePanel的更新是随机的,每次点击更新的数量和目标都不一样


\n

使用PageLoadingEventArgs的get_panelsUpdating()方法得到正在更新的UpdatePanel,get_panelsDeleting()方法得到正在删除的UpdatePanel


\n

PRM – pageLoaded事件
• 参数类型:PageLoadedEventArgs
– dataItems属性:获得服务器端注册的数据项
– panelsCreated属性:获得新建的UpdatePanel
– panelsUpdated属性:获得已经更新的UpdatePanel


\n

使用add_pageLoaded方法给此事件添加事件处理器。此事件通常用于获得服务器端注册的数据项、执行服务器端注册的脚本。在例子中有几个需要注意的地方:1.可以通过document.createElement方法创建标准的HTML控件(标签)如创建一个层document.createElement(“div”)2.通过appendChild方法追加自己的子标签3.在示例中有一段代码很奇怪,就是将UpdatePanel的ID付给新创建的DIV的ID,那么这个Div就成为了新的UpdatePanel。这个例子是追加更新的内容,不必每次刷新整个UpdatePanel。


\n

使用PageLoadedEventArgs的get_panelsUpdated()方法得到已经更新的UpdatePanel,get_panelsCreated得到已创建的UpdatePanel


\n

PRM – endRequest事件
• 参数类型: EndRequestEventArgs
– dataItems属性:获得服务器端注册的数据项
– error属性:获得异步刷新时获得的错误
– errorHandled属性:表明错误是否已被处理了
– response属性:获得这次请求获得的结果对象


\n

使用add_endRequest事件来给此事件添加事件处理器。主要用来处理异步刷新结果(异常、超时、取消, etc.)、获得请求结果中额外的信息、获得服务器端注册的数据项


\n

使用EndRequestEventArgs的get_error()方法,得到这个请求的错误对象,使用set_errorHandled()方法来设置错误是否被处理,参数为bool值。使用get_response()得到响应对象。响应对象也有几个常用方法1.get_timeOut()方法,得到这个请求是否超时返回。


\n

ScriptManager.GetCurrent(this).AsyncPostBackTimeout = 3;
注:使用上面代码设置ScriptManager设置异步回传超时时间。


\n

2.get_statusCode()方法得到响应对象的的状态代码,200为正常返回。3.get_aborted()方法。得到这个请求是否被取消。EndRequestEventArgs还有一个重要的方法get_dataItems()方法,得到服务器端注册的数据项。那么注册数据项服务单是如何处理呢?如以下代码


\n

ScriptManager.GetCurrent(this).RegisterDataItem(this.UpdatePanel1, DateTime.Now.ToString());


\n

那么上面这段代码就是给一个UpdatePanel注册一个数据项,RegisterDataItem还有一个重载,判断这个数据项是否已经被JSon序列化。


\n

在UpdatePanel的使用中,最好指定触发异步回传控件,并且指定UpdatePanel的UpdateMode的属性为Conditional,以确保不会被别的异步提交按钮影响。以上所有的事件处理器加载函数必需要在ScriptManager加载完毕以后,才能加载,否则,加载时会报错。也就是说,所有的事件加载函数必须放在ScriptManager控件的下面。


\n

\n