chiname
英文版见:http://dflying.dflying.net/1/archive/96_introduction_to_atlas_updatepanel.html

UpdatePanelASP.NET Atlas中很重要的一个控件。它把传统的ASP.NET程序与最新的Web 2.0 AJAX无缝的连接在一起。如果你已经有一些基于ASP.NET的网站,UpdatePanel可以让你通过很小的修改轻松的实现AJAX。如果你并不很熟悉AJAX相关的技术比如JavaScript/DOM等,UpdatePanel更是可以让你不用书写一行客户端脚本而实现酷酷的AJAX应用。所需要的就是把需要动态更新的部分放置于一个UpdatePanel中,这一点与MagicAjax Framework有着异曲同工之妙。

使用UpdatePanel很简单,只需要如下几个步骤:

  1. ASP.NET实现你的设计,此刻你并不需要考虑任何有关AJAX的问题,就像普通的ASP.NET程序一样。
  2. 在页面上添加一个ScriptManager对象,并设定属性EnablePartialUpdates=true
  3. 将你希望动态更新的部分用UpdatePanel包围起来
  4. 为你添加的UpdatePanel设定Event Trigger

只要这些步骤就够了,不需要考虑XMLHTTPRequest或者ActiveX对象,也不需要书写客户端的脚本或者考虑如何与服务器通信,所有的细节,Atlas已经为你做好了。

Atlas UpdatePanel的实现也很简单:浏览器如同普通PostBack一样Post回服务器,服务器处理后再次发送给浏览器,这个过程就和传统的页面模型一样。但到达客户端时ScriptManager只更新位于UpdatePanel中的内容和ViewState

使用UpdatePanel中应该注意的几个问题:

必须指定ScriptManager 中的属性EnablePartialUpdates=true,这样ScriptManager才会将普通的PostBack转化为对服务器的异步调用,也就是AJAX的方法。否则页面只会与传统的ASP.NET一样刷新。

其次,UpdatePanel提供两种引发异步PostBackTrigger

  • ControlValueTrigger当某个控件的某个指定的属性变化时更新。例如:ControlID="dropDownList1" PropertyName="SelectedValue"
  • ControlEventTrigger当某个控件发出指定事件时更新。例如:ControlID="button1" EventName="Click"

最后,每个UpdatePanel都有两种更新的方式:

  • Always每次AJAX PostBack或是普通PostBack的时候都会更新该Panel的内容
  • Conditional只有满足如下某一条件时才更新该Panel的内容:
    1. Panel中的某个控件引发了PostBack
    2. Panel所指定的某个Trigger被引发时
    3. PanelUpdate()方法在Codebehind中被调用时

一小段UpdatePanel的例子
 1<atlas:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server" />
 2<atlas:UpdatePanel ID="up1" runat="server">
 3 <Triggers>
 4     <atlas:ControlValueTrigger ControlID="dropDownList1" PropertyName="SelectedValue" />
 5     <atlas:ControlEventTrigger ControlID="button1" EventName="Click" />
 6 </Triggers>
 7 <ContentTemplate>
 8     Content Here. e.g. TextBox, GridView
 9 </ContentTemplate>
10</atlas:UpdatePanel>
11

另外还有两个有用的Atlas特性:UpdateProgress控件可以在更新的等待时间自动显示一段提示信息,可以是一段“更新中……”文字也可以是GIF图像或者是更复杂的定制的内容。还有Atlas提供的错误处理机制,以便集中处理更新中可能发生的错误。目前有很多AJAX程序的错误处理机制设计的并不是很好,包括Windows Live Mail

(这篇文章我先写的英文版,然后才是这个翻译版本。自己本身语言能力有限,有些地方生硬甚至语句不通顺,还请各位见谅。今后我会勤加练习用中文表达。更多的Atlas文章可以参考我的英文Bloghttp://dflying.dflying.net/


评论:
# re: Atlas UpdatePanel简要介绍 2006-03-25 14:23 | AlexHe.cs
要如何才能把UpdateProgress放在右上角啊  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-25 14:28 | Dflying Chen
@AlexHe.cs
您可以认为UpdateProgress就是一个普通的类似Label的ASP.NET控件,可以采用CSS定位等方法将其置于页面上的任何位置。  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-25 15:04 | DW
写的很好.  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-25 15:07 | WL
不错!!!  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-25 15:45 | dudu
不错! 正打算在博客园发表评论的页面中采用Atlas。  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-25 15:51 | Dflying Chen
@DW
@WL
@dudu
Thanks and let\'s make it better ;-)

@dudu
最简单的方法就是用两个UpdatePanel了,一个给Comment List一个给Comment Form,方便与现有系统集成。  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-25 15:54 | Jemmy
跟asp.net上的那个视频说的一样嘛,哈哈  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-25 16:32 | neuhawk1
呵呵,昨天刚用上,今天就有文章了.
对于treeview,数据量较大用updatepanel好象很慢.  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-25 16:35 | dudu
@Dflying Chen
谢谢你的建议!我正打算采用这种方式。  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-25 19:27 | 阿不
有一点补充:关于UpdateProgress,它支持取消操作,当你等待很久时需要取消你的操作时,还可以在ProgressTemplate内放一个LinkButton(或者普通的button)然后将它的控件ID设为:abortButton就行了,(注意控件ID一定要是abortButton,它内部是这样去找控件的 Control control1 = this.FindControl("abortButton");
)  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-25 19:30 | 阿不
@neuhawk1
是的,用在TreeView的时候好像都比较慢,这点我也深有体会.  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-25 20:22 | Dflying Chen
@阿不
如果有好多个UpdateProgress的话会怎么样呢?我想需要进一步研究。  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-25 21:37 | 阿不
@Dflying Chen
原来也没试过,刚好刚刚开着IDE,试了一下。当有多个UpdateProgress的时候,使用UpdatePanel时会同时出现这些UpdateProgress的提示。不会像ScriptManager一样,一个页面只允许一个实例。  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-27 16:00 | Dflying Chen
@阿不
根据http://www.nikhilk.net/AtlasM1Refresh.aspx,abortButton确实是一个Magic ID。这并不是一个很好的设计,相信在未来的版本中会有所改变。谢谢你的细心。  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-27 17:52 | Dflying Chen
@阿不
UpdateProgress理论上也不应该有多个。  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-27 19:15 | 阿不
@Dflying Chen
是的,出现多个UpdateProgress是不大合理的.关于abortButton,至少在目前的版本(March CTP)还没有看到一些变化.另外目前的版本虽然增加了WebPart对Firefox的拖拉支持,但是在使用过程却出现了更多的问题.对第三方控件的支持很不好.  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-27 19:35 | Dflying Chen
@阿不
第三方控件是指……?  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-27 19:59 | 阿不
如FreeTextBox,再有博客园里Thin写的日期控件,等.支持都不是很好.今天还发现一个问题,在原来的版本可以运行得很好,可在新版本里却会出现问题.搞得我今天好烦.  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-27 20:07 | Dflying Chen
@阿不
Ooops,确实跨平台的JavaScript程序比较难以完美的实现,特别是像Atlas这样大的架构。只能期待Release的时候会少些Bug吧……  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-27 20:40 | rimbaud
好象有让人变笨的感觉~!~-_-#!  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-27 22:43 | Dflying Chen
@rimbaud
发展的趋势就是越来越简化阿;-)  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-28 13:05 | 扬长而去
atlas ajax框加哪里有的下啊
还是包含在framework 2.0 里的
  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-28 13:35 | 阿不
@扬长而去
是一个单独的开发包,在 atlas.asp.net 下.  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-29 18:15 | H_J_H
新手上路,
小弟路经此地请问这个控件哪里有的下或有具体例程吗?谢谢!  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-29 18:20 | H_J_H
顺便问有是.NET 1.1的吗?  回复
  
# re: Atlas UpdatePanel简要介绍 2006-03-29 20:36 | Dflying Chen
# re: Atlas UpdatePanel简要介绍 2006-03-29 20:36 | Dflying Chen
@H_J_H
没有针对1.1的,如果您需要,可以考虑使用第三方的Atlas类库。  回复

分类:

技术点:

相关文章: