1. 前言
随着AJAX技术日益成熟,B/S桌面化的进程加快,市面上涌现出一大批AJAX控检,在众多控件中ATLAS控检是最受程序员喜欢的一种,下面我们就对ATLAS做初步的了解。
2. UpdatePanel控件
a)
UpdatePanel
是
ASP.NET Atlas
中很重要的一个控件。它把传统的
ASP.NET
程序与最新的
Web 2.0 AJAX
无缝的连接在一起。如果你已经有一些基于
ASP.NET
的网站,
UpdatePanel
可以让你通过很小的修改轻松的实现
AJAX
。如果你并不很熟悉
AJAX
相关的技术比如
JavaScript/DOM
等,
UpdatePanel
更是可以让你不用书写一行客户端脚本而实现酷酷的
AJAX
应用。所需要的就是把需要动态更新的部分放置于一个
UpdatePanel
中,这一点与
MagicAjax Framework
有着异曲同工之妙。
b)
使用
UpdatePanel
步骤:
用
ASP.NET
实现你的设计,此刻你并不需要考虑任何有关
AJAX
的问题,就像普通的
ASP.NET
程序一样。
在页面上添加一个
ScriptManager
对象,并设定属性
EnablePartialUpdates=true
将你希望动态更新的部分用
UpdatePanel
包围起来
为你添加的
UpdatePanel
设定
Event Trigger
只要这些步骤就够了,不需要考虑
XMLHTTPRequest
或者
ActiveX
对象,也不需要书写客户端的脚本或者
考虑如何与服务器通信,所有的细节,
Atlas
已经为你做好了
c)
Atlas UpdatePanel
的实现原理
浏览器如同普通
PostBack
一样
Post
回服务器,服务器处理后再次
发送给浏览器,这个过程就和传统的页面模型一样。但到达客户端时
ScriptManager
只更新位于
UpdatePanel
中的内容和
ViewState
d)
使用
UpdatePanel
中应该注意的几个问题
必须指定
ScriptManager
中的属性
EnablePartialUpdates=true
,这样
ScriptManager
才会将普通的
PostBack
转化为对服务器的异步调用,也就是
AJAX
的方法。否则页面只会与传统的
ASP.NET
一样刷新。
其次,
UpdatePanel
提供两种引发异步
PostBack
的
Trigger
:
•
ControlValueTrigger
:当某个控件的某个指定的属性变化时更新。例如:
ControlID="dropDownList1"
PropertyName="SelectedValue"
•
ControlEventTrigger
:当某个控件发出指定事件时更新。例如:
ControlID="button1"
EventName="Click"
最后,每个
UpdatePanel
都有两种更新的方式:
•
Always
:每次
AJAX PostBack
或是普通
PostBack
的时候都会更新该
Panel
的内容
•
Conditional
:只有满足如下某一条件时才更新该
Panel
的内容:
1.
当
Panel
中的某个控件引发了
PostBack
时
2.
当
Panel
所指定的某个
Trigger
被引发时
Atlas
学习指南
Dflying http://dflying.cnblgos.com
3.
当
Panel
的
Update()
方法在
Codebehind
中被调用时
e)
UpdatePanel
服务器控件使用技巧
1.
务必设定
ScriptManager
的
EnablePartialRendering
属性为
true
。有好多人向我抱怨说他
们的
UpdatePanel
并不以
AJAX
的方式工作而还是引发普通的整页
PostBack
,原因就在于没有设
定这个属性。
2.
设定触发
UpdatePanel
的控件为服务器控件。因为无论
ControlValueTrigger
还是
ControlEventTrigger
,指定的属性
/
事件都是服务器端属性
/
事件,都只在服务器端属性变化或
是服务器端发出事件时才能触发
UpdatePanel
的
PostBack
。
3.
区别
UpdatePanel
的两种更新方式:
Always
和
Conditional
。请参考:
http://dflying.cnblogs.com/archive/2006/03/25/358547.html
。我们应该设定正确的更新方
式以避免更新不必要更新的
Panel
,造成不必要的性能
/
网络开销。
4.
不要
只
使用
UpdatePanel
。如果你从头开始建立一个
Atlas
程序,仅仅使用
UpdatePanel
来实现
AJAX
可能并不是最好的选择。
UpdatePanel
仅仅简单的从头渲染所有的位于
ContentTemplate
内部的控件,在某些情况下可能非常低效,例如,对于一个包含了一个有相当多结点的
TreeView
控
件的
UpdatePanel
来说,如果你只是想简单的添加一个新节点,使用
UpdatePanel
将会从后台取
得整个
TreeView
并重新渲染,远不及仅存储后并把这个新的节点添加到
TreeView
中来得高效。在
这些情况下,你最好考虑使用一些较高级的
Atlas
客户端控件。当然,这也加大了一些开发的难度。
5.
在页面的
InitComplete
事件被引发前必须保证
UpdatePanel
已经被初始化。也就是说,不能
将
UpdatePanel
放置于比如一个
DataList
的
HeaderTemplate
中,因为
HeaderTemplate
中的
内容是在
Databinding
时期才得到的,而这时页面的
InitComplete
事件早已经结束。
6.
在
UpdatePanel
中不要使用
Response.Write();
。这会扰乱
UpdatePanel
的执行过程。
7. Atlas
的客户端脚本可以使用于任何的开发平台
/
语言中。例如
ASP.NET 1.1
,纯
HTML
甚至
PHP
,
但是像
UpdatePanel
这样的服务器端控件只能用于
ASP.NET 2.0
页面中。
Atlas
的客户端脚本实际
上就是一些经过组织的
JavaScript
文件,当然是与服务器端选用的技术无关的。但当你使用非
ASP.NET 2.0
环境时,需要手动加入对这些
JavaScript
文件的引用,因为你无法使用
ASP.NET 2.0
中的服务器端控件
ScriptManager
。
8.
小心在
UpdatePanel
中包含第三方
JavaScript
实现的组件。开发跨平台的
JavaScript
Framework
是一件很艰巨的任务,在目前的
Atlas
实现中仍有很多兼容性的问题。让我们期待未来
会更好或者干脆现在想办法自己解决吧。
9.
在页面上
添加一个且只添加一个
UpdateProgress
控件。
UpdateProgress
控件应当是一个全局
的控件,所有的
AJAX
操作都会自动地由
UpdateProgress
控件来处理。想象一下如果
Gmail
一下
子显示了好多个
Loading
提示,用户一定会不知所措吧。
10.
在
UpdateProgress
的
Template
中有一个
magic ID
:
abortButton
,你可以提供一个服务器
端
Button
或者
LinkButton
控件并指定
ID
为
abortButton
,使用户可以取消当前执行的
AJAX
请
求。当然,使用
magic ID
并不是一个好的设计方法,相信在未来的版本中这个
magic ID
会被一个
类似<CancelTemplate>的东西取代。当然,在当前的Atlas 版本中,请记住abortButton。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1340496