Atlas讲座(1)- UpdatePanel控件

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

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值