简单点来说,UpdatePanel 可以用来创建丰富的局部更新Web应用程序,它是 ASP.NET 2.0 AJAX Extensions中(ASP.Net3.5中已经包含)很重要的一个控件,它的强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个 UpdatePanel 控件和一个 ScriptManager 控件就可以自动实现局部更新。

      UpdatePanel 的工作依赖于 ScriptManager 服务端控件和客户端 PageRequestManager,当 ScriptManager 中允许页面局部更新时,它会以异步的方式回传给服务器,与传统的整页回传方式不同的是只有包含在 UpdatePanel 中的页面部分会被更新,在从服务端返回 HTML 之后,PageRequestManager 会通过操作 DOM 对象来替换需要更新的代码片段。

 

以上说法可能过于笼统,下面是稍微细致点的解释:

 

UpdatePanel 依赖于服务端控件ScriptManager和客户端脚本对象PageRequestManager。

 

Submit 被页面上的PageRequestManager截获, PageRequestManager会判断是传统提交还是异步提交。如果是异步提交,就使用XmlHttpRequest来提交,提交的内容除了传统提交的form外,还包含一个自定义的http header “x-myajax”来通知server端这是一个异步提交,然后和传统提交一样走完完整的生命周期。

Init

Load State

Process Postback

Load

Postback Events

Save State

PreRender

Render

UnLoad

在Render阶段,ScriptManager如果看到http header “x-myajax”标记,就会替换掉Page对象的输出方式,输出需要刷新的UpdatePanel中的内容和一些ViewState。在收到服务端的处理结果之后,PageRequestManager会通过操作DOM对象来替换需要更新的代码片段。需要执行的JavaScript也会在此时传送到客户端执行。最后客户端的XMLHttpRequest对象收到了这部分信息,并在不知不觉悄悄地更新了UpatePanel中定义的内容。

 

异步请求的内容包含如下数据,与整页更新相比没有任何减少

– 采集Form中所有<input />并发送

– 包含ViewState

 

应该尽可能减少客户端接受到的数据大小,可以使用如下方式:

– 使用多个UpdatePanel包含多个部分

– UpdateMode尽量不要设为Always