学习asp.net ajax (二)(updatepanel 服务器端)

updatepanel 服务器端

 基本属性

 RenserMode属性

 用一个元素来圈出一个区域

 -Block使用div来包含,-Inline使用span来包含

 UpdateMode 更新的条件

-Aways是所有的某次异步的postback更新

 -Conditional是满足一定条件更新

 尽可能用Conditional 因为Aways是所有的异步postback都会产生刷新

 ChildreAsTriggers bool属性

-ChildreAsTriggers为true表示如一个异步的postback由某个内部一个控件引发,updatepanel会产生更新

Triggers

 指定<ContentTemplate>外部控件产生postback回发就会跟新updatepanel里面数据,注意外部更新不会让UpdateProgress显示出来

   -AsyncPostBackTrigger 指定一个控件来回发

   -PostBackTrigger 引发一个传统的刷新,即整个页面刷新

 

UpdatePanel控件

Update方法:强制某个updatePanel进行异步更新

IsInPartialRendering:判断UpdatePanel控件是否在输出过程

ScriptManager控件

GetCurrent 静态方法:获得当前页面上的ScriptManager

对象

IsInAsyncPostBack:是否在部分回发过程中

RegisterAsyncPostBackControl:指定某控件为异步PostBack控件

RegisterPostBackControl:指定是传统PostBack控件

UpdateProgress控件认识

DynamicLayout属性:

隐藏时是否占位,默认为true

DisplayAfter属性:延迟多少时间后显示,单位为毫秒,默认500

AssociatedUpdatePanellD属性:

关联UpdatePanelID,默认为null,如果没有指定的话,任何一个updatepanel提交它的内容就会显示出来,关联的话,在更新时候就只会显示出来它

这里有一个局限性,就是在updatepanel内部一个控件触发刷新才会显示出来,外面控件触发回发刷新是不显示的

Timer控件

定期的更新

Interval属性:更新时间间隔,单位为毫秒,默认值为60000.

Tick事件:响应这个时间做一些事情

 

Validators控件

注意一下vs2005的Validators控件不支持asp.net ajax,但是vs2008支持了

 

asp.net脚本注册

特别推荐不要用respones.write输出脚本,这样会破坏结构,最好用下面的方法调出脚本

ClientScriptManager cs=this.ClientScript;

cs.RegisterStartupscript(this.GetType(),”key”,”<script>alert(‘弹出对话框’);</script>”

 

在异步更新的环境中注册脚本

使用ScriptManager对应的静态方法

新方法可以用来完全替换原有方法

在非异步回送环境中使用ClientScriptManager的对应方法进行注册

ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "updatepanel1", "<script>alert('您好') </script>",false);

只用当更新之后才会出现(每次注册的脚本不一定会出现)

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "updatepanel1", "<script>alert('您好') </script>",false);

保证他会输出

 

错误处理

服务器端ScriptManager设置

AllowCustomErrorsRedirect属性:遇到错误是否自动根据web.config中的设置跳转,默认值为true

AsyncPostBackError事件:异步刷新中出现错误触发的事件

AsyncostBackErrorMessage属性:客户端接受到的错误信息

 

客户端编程

响应PaggeREquestManager的endRequest事件

将errorHandled属性设置为true.

 

在客户端处理错误,不需要在服务器端跳转

<script>

                 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, e)

                 {

                       e.set_errorHandled(true);

                      $get("error").innerHTML = "Sorry, an error has occurred: " + e.get_error().message;

                      setTimeout(function(){ $get("error").innerHTML = ""; }, 3000);

                 });

           </script>

 

传统的PostBack过程

Submit 将数据post到服务器端

init

Load State

Process PostBack

Load

PostBack Events

Save state

PreRender

Render(输出)

Upload

 

异步刷新

Submint 数据被PageRequestManager截获了并进行判断是传统的提交还是异步的提交

如果是异步提交(From+Header)

服务器端还是一个完整的页面周期

异步提交会在Header放置一个特殊标记

在Render会使用异步刷新的内容 

 

实现原理简要分析

请求的内容没有任何减少,反而增加了一些数据(可以忽略不计)

尽可能少客户端接受到数据

 

简单实现原理分析

异步更新被调用的条件

UpdateMode为Always

AsyncPostBackTrigger条件被满足

Update被调用

 

ASP.NET 通过调用两个函数($_onFormSubmit,$__dopostback)来提交

 

 

posted @ 2009-10-22 19:45  胡佳180815  阅读(726)  评论(0编辑  收藏  举报