简单的UpdatePanel定义如下:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger />
<asp:PostBackTrigger />
</Triggers>
</asp:UpdatePanel>
<ContentTemplate>标签用来定义UpdatePanel的
内容,在它里面可以放任何ASP.NET元素。<Triggers>属性有两种:分别为AsyncPostBackTrigger和PostBackTrigger。AsyncPostBackTrigge用来指定某个服务器端控件以及其将触发的服务器端事件作为该UpdatePanel的异步更新触发器,它需要设置的属性有控件ID和服务端控件的事件;PostBackTrigger用来指定在UpdatePanel中的某个服务端控件,它所引发的回送不使用异步回送,而仍然是传统的整页回送。
4.2.3 UpdateProgress控件
在UpdatePanel控件中的内容进行局部刷新时,该控件可以提供刷新状态的信息。前文所述,一个页面上可以放一个或者多个UpdatePanel控件,但是,当其中一个UpdatePanel中更新的内容很缓慢,需要用户等待很长时间时,很容易让用户误以为
应用程序处于“死机”状态。在这种情况下,UpdateProgress控件就发挥出它的特性,提供页面部分内容刷新时的状态信息。一个页面上,一个UpdateProgress控件可以和一个UpdataPanel控件关联,也可以和多个UpdatePanel控件关联。UpdateProgress控件提供了AssociatedUpdate PanelID属性,可以指定UpdateProgress控件显示哪一个UpdatePanel控件。
UpdateProgress控件的简单定义如下:
<asp:UpdateProgressID=”UpdateProgress1” runat=”server” AssociatedUpdatePanelID=
UpdatePanel1">
<ProgressTemplate>
数据正在读取中,请稍后……
</ProgressTemplate>
</asp:UpdateProgress>
4.2.4 Timer控件
该控件用于在一个规定的时间内执行提交操作。使用Timer控件可以执行提交整个页面操作,也可以和UpdatePanel控件一起使用,在规定时间内执行页面的局部刷新操作。Timer控件作为服务器控件将JavaScript部件嵌入到了Web页面中,当Timer控件的Interval属性设置的间隔时间到达时,该部件便会激发来自于浏览器的提交操作。Timer控件设置的属性操作在服务器端运行,并且将这些属性值传递给JavaScript部件。与其他控件一样,Timer控件也需要依赖于ScriptManager控件。Timer控件既可以放在UpdatePanel控件外,也可以放在UpdatePanel控件内。其简单的定义如下:
<asp:Timer ID="Timer1" runat="server">
</asp:Timer>
值得注意的是,如果把Timer控件的Interval属性值设置得过小,会对Web服务器造成严重的阻塞。所以,当页面上要刷新的内容部分是必要的而且是频繁的时候,才考虑使用Timer控件。
5 VS2005开发环境中使用ASP.NET AJAX控件要注意的问题
在利用VS2005进行Web开发的过程中,需要使用各种服务器控件。一般情况下,VS2005的常用控件都是可以和ASP.NET AJAX控件结合使用的。但是,以下控件与ASP.NET AJAX控件有不相兼容的地方,是需要注意的。
5.1 与UpdatePanel控件不兼容的控件
⑴TreeView和Menu控件; Web Parts 控件; Substitution控件。
⑵登录控件,如Login,PasswordRecovery,Change Password和CreateUserWizard控件。在默认情况下,上述控件与UpdatePanel控件是不相兼容的。当上述控件转换为可编辑状态时,登录控件中的验证控件便可以与UpdatePanel控件兼容。
⑶验证控件类。如BaseCompareValidator,BaseValidator,CompareValidator,customValidator,RangeValidator,Regular ExpressionValidator,RequiredFieldValidator和Validation Summary控件。这些控件在默认情况下也可以与UpdatePanel控件结合使用,但是在Web应用程序发布之后,上述验证功能可能会出现失效情形。要使得这些验证控件能与UpdatePanel控件兼容,需要把上述验证类控件的Enable ClientScript属性设置为false。这样,就不允许客户端脚本被用于在浏览器端执行验证操作。在异步式提交操作中,验证控件就会在服务器端执行验证操作。
⑷GridView和DetailsView控件。在默认情况下,GridView和DetailsView控件与UpdatePanel控件可正常兼容使用。但是,如果把它们的EnableSortingAndPagingCallbacks属性设置为True的时候(默认值为False),在UpdatePanle中的GridView和DetailsView控件的排序和分页功能将失效。
⑸FileUpload控件。FileUpload控件在默认情况下,放在UpdatePanel中并且有控件触发时,不能发挥上传作用。但是当UpdatePanel的Triggers属性中,设置触发控件(例如Button,)为PostBack时,FileUpload可以发挥上传功能,只是整个页面不能局部刷新。
5.2 页面跳转要注意的问题
通常情况下,开发Web应用程序就必然会有页面之间的传值与跳转。如果UpdatePanel内有触发页面跳转的控件(如Button),那么该控件的事件中就不能用如下的语句,否则会弹出异常的对话框。
⑴ 调用Response.Write():
⑵ 调用Response filters:
⑶ HttpModules:
⑷ 调用Server.Transfer()。
5.3 利用ASP.NET AJAX控件后,弹出对话框的问题
在使用ASP.NET AJAX控件后,如果想利用Js脚本来输出一些提示对话框,往往会想到利用 Page.Register ClientScriptBlock或者 Page.RegisterStartupScript注册,但是,页面上仍然没有提示信息。利用如下语句即可以解决这个问题:
ScriptManager.RegisterClientScriptBlock(UpdatePanel1,this.GetType(),"click","alert('提示信息')",true); 就可以正常的弹出alert对话框了。
需要注意的是,如果在页面中有多个UpdatePanel,如果每个UpdatePanel的UpdateMode的属性值都是“always”(默认值),则可以使用那个UpdatePanel的实例作为参数;如果每个UpdaePanel的UpdateMode属性值为conditional,那么就必须使用正在更新的那个UpdatePanel作为参数,这样脚本才能起作用。
6 小结
AJAX因具有独特的优势,迅速成为Web
研究热点,并在实际开发得到广泛应用,使网页开发的效能得到了很大的扩展。本文从AJAX的
理论出发,引申到ASP.NET AJAX的原理,
总结了利用VS2005开发工具和ASP.NET AJAX框架开发WEB应用程序中的若干问题,为Web应用的开发提供了很好的借鉴作用。ASP.NET AJAX将会是Web开发中重要的利器,应用也将会越来越广泛。