学习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)来提交