Atlas学习手记(3):由UpdatePanel开始

UpdatePanelAtlas中一个很重要的控件,功能强大且容易使用,可以使我们只做很小的改动就可以向已有的ASP.NET站点添加Ajax。采用Dflying的建议,我也是由UpdatePanel进入Atlas的世界。本文将通过可视化和代码两种方式来实现向已有的ASP.NET应用程序中添加UpdatePanel


主要内容

1UpdatePanel概述

2.使用可视化方式

3.使用代码方式

 

一.UpdatePanel概述

UpdatePanelAtlas中一个很重要的控件,功能强大且容易使用,可以使我们只做很小的改动就可以向已有的ASP.NET站点添加Ajax。采用Dflying的建议,我也是由UpdatePanel进入Atlas的世界。本文将通过可视化和代码两种方式来实现向已有的ASP.NET应用程序中添加UpdatePanel。看一小段UpdatePanel的示例程序:

<Atlas:UpdatePanel ID="UpdatePanel1" runat="server" Mode="Always">

    
<Triggers>

        
<Atlas:ControlEventTrigger ControlID="DropDownList1" EventName="SelectedIndexChanged" />

    
</Triggers>

    
<ContentTemplate>

       
<asp:Label ID="Label1" runat="server" Width="164px" Font-Bold="True"></asp:Label>

    
</ContentTemplate>

</Atlas:UpdatePanel>

我们需要注意的是:

1UpdatePanel的更新方式有两种,即上面的Mode

更新方式

说明

Always

每次AJAX PostBack或是普通PostBack的时候都会更新该Panel的内容

Mode="Always"

Conditional

只有满足如下某一条件时才更新该Panel的内容:

Panel中的某个控件引发了PostBack

Panel所指定的某个Trigger被引发时

PanelUpdate()方法在Codebehind中被调用时

Mode=" Conditional"

2Triggers元素指定了发生动作的事件源,UpdatePanel提供两种引发异步PostBackTrigger

Triggers

说明

ControlValueTrigger

当某个控件的某个指定的属性变化时更新。

<Atlas:ControlValueTrigger ControlID="DropDownList1" PropertyName="SelectedValue" />

ControlEventTrigger

当某个控件发出指定事件时更新。

<Atlas:ControlEventTrigger ControlID="DropDownList1" EventName="SelectedIndexChanged" />

3ContentTemplate元素中指定了希望更新的部分,我们把需要动态更新的控件等都放在ContentTemplate中。下面我们将通过通过可视化和代码两种方式来看一下如何使用UpdatePanel

二.使用可视化方式添加

1.新建Web Site项目,添加一个DropDownList和一个Label,并为DropDownList添加一些简单的Item

<asp:DropDownList ID="DropDownList1" runat="server" Width="167px" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">

    
<asp:ListItem>Nancy</asp:ListItem>

    
<asp:ListItem>Andrew</asp:ListItem>

    
<asp:ListItem>Janet</asp:ListItem>

    
<asp:ListItem>Margaret</asp:ListItem>

</asp:DropDownList>

设置DropDownListAutoPostBack属性为True,在SelectedIndexChanged事件中添加如下代码:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)

{

    
this.Label1.Text = "Selected : " + this.DropDownList1.SelectedValue;

}

2.运行程序,这是一个标准的ASP.NET应用程序,Label将根据DropDownList的选择不同显示不同的文本,但是这个页面是完全刷新的,在选择的时候,浏览器的状态栏将会显示一个进度条,如下图所示:


下面我们将通过可视化的方式为该应用程序添加上Atlas UpdatePanel

3.托拽一个UpdatePanel控件到页面上,如何添加Atlas控件到工具箱请参考Add“Atlas”controls to the toolbox,这时将会自动添加Microsoft.Web.Atlas.dll到项目中。

4.添加ScriptManager到页面。

5.设置EnablePartialRendering属性为True

6.拖拽Label控件到UpdatePanel中,并设置UpdatePanel的属性和Triggers

至此,我们就通过可视化的方式完成了对UpdatePanel的添加,运行程序就会看到效果了。

三.使用代码方式添加

接上面的第二步,我们看看添加具体的代码。添加完Microsoft.Web.Atlas.dll的引用后,在页面中先添加:

<%@ Register Assembly="Microsoft.Web.Atlas" Namespace="Microsoft.Web.UI" TagPrefix="Atlas" %>

添加ScriptManager控件,并设置EnablePartialRendering属性为true,这一点切记!关于ScriptManager的详细介绍可以参考Atlas学习手记(2):全面了解ScriptManager

<Atlas:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">

</Atlas:ScriptManager>

下面就该主角UpdatePanel登场了,在这里需要设置TriggersTriggers指定了发生动作的事件源,也可以设置UpdatePanel的更新方式。

<Atlas:UpdatePanel ID="UpdatePanel1" runat="server">

    
<Triggers>

        
<Atlas:ControlValueTrigger ControlID="DropDownList1" PropertyName="SelectedValue" />

    
</Triggers>

    
<ContentTemplate>

       
<asp:Label ID="Label1" runat="server" Width="164px" Font-Bold="True"></asp:Label>

    
</ContentTemplate>

</Atlas:UpdatePanel>

这里我们设置的是ControlValueTrigger,如果要设置ControlEventTrigger,代码如下:

<Atlas:UpdatePanel ID="UpdatePanel1" runat="server">

    
<Triggers>

        
<Atlas:ControlEventTrigger ControlID="DropDownList1" EventName="SelectedIndexChanged" />

    
</Triggers>

    
<ContentTemplate>

       
<asp:Label ID="Label1" runat="server" Width="164px" Font-Bold="True"></asp:Label>

    
</ContentTemplate>

</Atlas:UpdatePanel>

到这儿所有的步骤都做完了,运行就可以体会到效果了。在这个过程中,我们并没有考虑任何的XMLHTTPRequest或者ActiveX对象,也没有编写任何的客户端脚本代码,这一切Atlas已经完全为我们做好了。

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
0
0
(请您对文章做出评价)
« 上一篇:Atlas学习手记(2):全面了解ScriptManager
» 下一篇:Atlas学习手记(4):使用AutoComplete Extender实现自动完成功能
posted @ 2006-07-27 12:48 TerryLee 阅读(8988) 评论(42)  编辑 收藏 所属分类: [08]  Web开发, [01]  .NET大本营

  回复  引用    
#1楼2006-07-27 12:57 | junmy.wu[未注册用户]
强哥。我一直都在关注你的blog。。

真是为人民服务的好同志啊 。。


  回复  引用  查看    
#2楼[楼主]2006-07-27 13:04 | TerryLee      
@junmy.wu

呵呵,谢谢,其实我自己也是刚开始学习Atlas

一边学习一边写点东西,对我自己来说会更轻松,能够很好的理清思路,对于别的初学者来说,也是一个参考:)

  回复  引用  查看    
#3楼2006-07-27 13:18 | aspnetx      
请问这个和magicajax的ajaxpanel是否是一样的呢?
ajaxpanel基本上支持asp.net2.0的所有控件,包括webpart

  回复  引用  查看    
#4楼[楼主]2006-07-27 13:24 | TerryLee      
@aspnetx

与Magicajax的AjaxPanel差不多。

  回复  引用    
#5楼2006-07-27 15:01 | amour_2008@hotmail.com[未注册用户]
Atlas有没有可以拖的Pannel,并且要实现记住Pannel布局的功能
  回复  引用  查看    
#6楼[楼主]2006-07-27 15:15 | TerryLee      
@amour_2008@hotmail.com

刚开始研究Atlas,还不太清楚:-)


  回复  引用    
#7楼2006-07-27 16:16 | junmy.wu[未注册用户]


Microsoft.Web.Atlas.dll

加到工具箱 就有很多 atlas控件可以拖啊

  回复  引用  查看    
#8楼[楼主]2006-07-27 17:56 | TerryLee      
@junmy.wu

是有很多控件,这里只介绍了UpdatePanel,后面还会介绍其他的控件。

  回复  引用  查看    
#9楼2006-07-28 01:29 | Dflying Chen      
@amour_2008@hotmail.com
可以使用DragDropList或者floatingBehavior
http://dflying.cnblogs.com/archive/2006/04/21/381763.html

@TerryLee
献丑了 :)

  回复  引用  查看    
#10楼[楼主]2006-07-28 08:00 | TerryLee      
@Dflying Chen
呵呵,我刚开始学习Atlas,很多东西还得向你学习呢:-)

  回复  引用    
#11楼2006-08-09 22:27 | 锦瑟[未注册用户]
这个东西才是atlas的精华所在!其他都是些小玩意.
  回复  引用  查看    
#12楼[楼主]2006-08-10 08:03 | TerryLee      
@锦瑟
不要这么绝对嘛,UpdatePanel是个好东西,服务端的Extender这种思想也不错啊。

  回复  引用  查看    
#13楼2006-08-15 09:00 | 李智斌      
我剛學做網站,到現在還不知Altas的好處在那,Altas是不是管理JaveScript的,
若 是,直接寫不是一樣的嗎

  回复  引用    
#14楼2006-08-16 00:52 | 孤叶[未注册用户]
我在为updatepanel添加触发事件时出现
the selected trigger has not been fully configured.please ensure that all of its settings have been configured(触发器没有被完整地配置,请确定所有的设置已被完整的配置),可是我是按照你所写的一步步来的,为什么会这样呢,官网我看不大懂,麻烦你帮我看下,谢谢

  回复  引用  查看    
#15楼[楼主]2006-08-16 08:20 | TerryLee      
@孤叶
看一下你的EventName写的对不对?

  回复  引用  查看    
#16楼[楼主]2006-08-16 08:22 | TerryLee      
@李智斌
Atlas是.NET平台下的一种Ajax框架!

  回复  引用    
#17楼2006-08-16 11:20 | 孤叶[未注册用户]
@TerryLee
我用代码来写
<Atlas:ControlValueTrigger ControlID="DropDownList1" PropertyName="SelectedValue" />
来加入事件,可是却出现
错误 1 类型“Microsoft.Web.UI.UpdatePanel”不具有名为“ControlValueTrigger”的公共属性。

也就是说这个属性在控件中不存在,可能吗?
你有atlas的安装包吗?我的是从官网下的,应没有问题吧

  回复  引用  查看    
#18楼[楼主]2006-08-16 11:34 | TerryLee      
@孤叶
我也是从官方网站上载的
这个不太清楚是什么问题-_-

  回复  引用    
#19楼2006-08-16 11:47 | 孤叶[未注册用户]
@TerryLee
感谢谢你的回复,非常之
我的问题解决了,原来是我不细心,谢谢

  回复  引用  查看    
#20楼2006-08-16 18:35 | 天轰穿      
不错了,呵呵
  回复  引用    
#21楼2006-08-16 22:45 | ylhyh[未注册用户]
好样的
  回复  引用  查看    
#22楼2006-08-20 18:53 | spiderNet      
刚刚接触Atlas,好象UpdatePanel能做的事,都可以通过atlas script结合web Service 的方式来完成,并且后者占用资源更少,不知我理解的是不是对的呢?
  回复  引用    
#23楼2006-08-20 21:40 | 孤叶[未注册用户]
最近在使用vs 2005想用treeview控件动态加载数据,就是点一个节点时动态加载这个节点的的子节点,可是用altas框架来做好像不行,因为我们都知道用不着altas必需设计控件的autopostback的属性为true可是在.net2.0中treeview控件却没有这个属性,而altas却是基于.net2.0的,所以看似无法用altas来解决这个问题,我想了好久还是不知要怎么做,那位高人可以帮忙下.terrylee啥时候回来呀,看到我的留言帮忙想下
  回复  引用  查看    
#24楼[楼主]2006-08-23 14:11 | TerryLee      
@spiderNet
UpdatePanel功能是很强大,慢慢会体会到!

  回复  引用    
#25楼2006-08-23 14:59 | sea bird[未注册用户]
刚学习Atlas就遇到了这样一个问题:
用DataGrid(asp.net 2.0中的)绑定了一张表中的数据,而且在此DataGrid中添加了编辑、删除列。
每当时行编辑、删除操作时页面都将刷新。
因此想用Atlas解决此刷新问题,于是在页面中添加了一个ScriptManager、一个UpdatePanel并将上面的DataGrid拖到UpdatePanel中,可是当添加Trigger时却找不到这个DataGrid,为什么?把DataGrid拖到外面又找到了(这样却就无法实现无刷新编辑删除操作了)。请问这个问题如何解决?

  回复  引用  查看    
#27楼2006-09-05 17:19 | 行与思      
谢谢了,你的博客给我很多帮助,关注中……
  回复  引用  查看    
#28楼2006-09-18 10:54 | wonder      
好同志...强人!!!!!!!!!!!!!!!!!!!!!!
  回复  引用  查看    
#29楼[楼主]2006-09-18 11:11 | TerryLee      
@行与思
@wonder

呵呵,太客气了:-)

  回复  引用  查看    
#30楼2006-09-18 20:18 | MaxFree      
TerryLee 在博客园,就像大哥一样。会一直关注你的Blog。
您最值的学习的,是您的学习方法。

  回复  引用  查看    
#31楼[楼主]2006-09-18 21:04 | TerryLee      
@MaxFree
大家共同交流:-)

  回复  引用    
#32楼2006-09-23 09:14 | minghui227[未注册用户]
@孤叶
我也碰到你的问题了
the selected trigger has not been fully configured.please ensure that all of its settings have been configured
你是怎么解决的?

  回复  引用    
#33楼2006-09-25 17:49 | keyplayer[未注册用户]
我在一个页面中有DataGrid1和DataGrid2,分别放入UpdatePanel1和UpdatePanel2中,当我点击“按钮1”时,希望它只是刷新DataGrid1,当我点击“按钮2”时,希望它只是刷新DataGrid2,

但实际中,当我点击“按钮1”时,DataGrid1刷新了,但DataGrid2也出现闪烁,怎么才能让点击“按钮1”时,DataGrid2不出现闪烁?

  回复  引用  查看    
#34楼2006-09-27 10:56 | 行与思      
@keyplayer
把UpdatePanel1的Mode设成Conditional应该就可以了

  回复  引用    
#35楼2006-09-28 08:22 | keyplayer[未注册用户]
我按照本例子做的,运行结果昨天都是对的,今天点击DropDownList1后,就提示"unknown error",而不执行DropDownList1_SelectedIndexChanged的代码???
  回复  引用    
#36楼2006-09-29 17:00 | keyplayer[未注册用户]
刚才还运行得好好的,现在又出现"unknown error"提示框,怎么配置ScriptManager的ERROR才能使它不出现提示框!
  回复  引用  查看    
#37楼[楼主]2006-10-06 17:22 | TerryLee      
@keyplayer
参考前一篇文章的内容ScriptManager。

  回复  引用    
#38楼2006-10-16 13:41 | 饭桶[未注册用户]
老大,俺想用UPDATEPANEL中加repeater,怎么引用repeater的数据呀?
以前在外面引用的,COPY到updatepanel代码断内就不认了

  回复  引用  查看    
#39楼[楼主]2006-10-16 21:29 | TerryLee      
@饭桶
这个我没试过,估计是拷贝到updatepanel中页面上的控件发生了变化:)

  回复  引用    
#40楼2007-01-17 00:41 | snyod[未注册用户]
代表党(.NET平台)感谢您.
全部收藏.....................

中国最好的.NET平台学习网...

  回复  引用    
#41楼2007-01-21 08:50 | Jason Peng[未注册用户]
各位同仁:
我在调试一个DataControl 的 vb.net 程序块时遇到下列语句出现错误信息:
Private up1 As Microsoft.Web.UI.UpdatePanel = Nothing
上面语句在 VS2005 中的错误信息是:
Error 1: Type 'Microsoft.Web.UI.UpdatePanel' is not defined.
请教这是什么原因? 多谢指点。

  回复  引用  查看    
#42楼[楼主]2007-01-21 22:33 | TerryLee      
@Jason Peng
你用的是哪个ASP.NET AJAX版本?

最新的RC1中命名空间已经修改为了System.Web.UI