Atlas快速入门之实战Atlas

允许一个互联网浏览器向一个远程页面/服务作异步的HTTP调用,并且用收到的结果更新一个当前web页面而不必刷新整个页面。

 

Atlas快速入门之实战Atlas

    作者:廖煜嵘编译            出处:天极开发

摘要:

允许一个互联网浏览器向一个远程页面/服务作异步的HTTP调用,并且用收到的结果更新一个当前web页面而不必刷新整个页面。

正文:

随着ajax技术的出现,web 2.0时代已经来临,目前已经涌现了大量的web 2.0的网站,比如live.com,fclickr相册网站,google Map等等。那什么是ajax呢?AJAX技术其实是旧瓶装新酒了,它使用了异步JavaScript+XML。这种技术首先由微软在1999年引入,并以"使用远程调用的DHTML/JavaScript web应用程序"著称。这一技术的基本思想是,允许一个互联网浏览器向一个远程页面/服务作异步的HTTP调用,并且用收到的结果更新一个当前web页面而不必刷新整个页面。根据这种技术创建者的意见,这种技术应能够改进客户端的体验,使得HTTP页面外观与使用感觉很类似于Windows桌面应用程序。

  目前,已经涌现出了不少关于ajax的技术框架。而在.net 方面,也有不少开源的框架,如ajax.net,magic ajax等。而微软也推出了自己的ajax框架----Atlas,目前的版本是6月份的CTP版本。在Atlas中,已经封装好了大量的ajax控件和功能,十分方便。本文中将以两个实例来说明如何使用Atlas来实现两个简单的ajax应用。

  首先,我们要下载atlas,可以到 http://atlas.asp.net上去下载atlas的相关安装文件。我们先来看一个简单的例子,在这个例子中,
我们通过asp.net 2.0中的日历控件来说明如何使用atlas.先打开vs.net 2005,选择"新建web站点",如下图,这时会发现有"Atlas web site"的模版,这时我们可以输入要创建应用的名称,这里我们就用默认的名称AtlasWebSite1。



  在方案解决器中,你会发现vs.net 2005已经预先放置了一些文件,其中,在bin文件夹下包含了Microsoft.Web.Atlas.dll文件,这是支持ajax功能的文件。为了能在设计中使用到ajax控件,必须在TOOLS工具箱中添加一个新的选项卡,命名为Atals,然后右键点击该选项卡,在弹出的菜单中选择"choose item",然后用浏览的功能,选择atals.dll文件,这样,就添加了一系列的Atals控件,如下图:



  我们将其中的ScriptManager控件拖拉到页面中去。ScriptManager控件可以看作是管理Atlas控件的集合,它用来处理页面上的所有Atlas组件以及局部页面的更新,生成相关的客户端脚本,所有需要支持Atlas的ASP.NET页面上有且只能有一个ScriptManager控件。在ScriptManager控件中我们可以指定需要的脚本库,或者指定通过JS来调用的Web Service,还可以指定页面错误处理等。

  接着,我们拖拉一个日历控件到页面中去,放在刚才scriptmanager控件的下面,并且选择一个喜欢的样式,如下图所示:

接下来,我们看下如何在这个日历控件中使用ajax技术。在.net 的日历控件中,人们经常抱怨的是,每次选定日历上的一个日期,都会引发一次postback页面回传,需要用户等待,十分不方便。下面,我们通过Atals控件,来对日历控件进行改造。

  在default.aspx页中,切换到代码视图,在之前的<atlas:ScriptManager>控件中,加入EnablePartialRendering属性,以使得atlas可以对页面进行局部更新,如下所示

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

  再增加一个<UpdatePanel>控件,UpdatePanel是Atlas中一个很重要的控件,功能强大容易使用,可以只做很小的改动就可以向已有的ASP.NET站点添加Ajax功能,我们再将日历控件拖拉放到updatepanel控件中去,其中要注意到,日历控件是放到<ContentTemplate>的标签内的,该标签内放的就是受UpdatePanel控制的控件,如下代码所示:

<atlas:UpdatePanel ID="id1" runat="server">
<ContentTemplate>
<asp:Calendar ID="Calendar1" runat="server"
BackColor="#FFFFCC" ... />
</asp:Calendar>
</ContentTemplate>
</atlas:UpdatePanel>

  为了更好地看到效果,我们增加两个下拉选择框,可以让用户选择年份和月份,代码如下所示

<form id="form1" runat="server">
<atlas:ScriptManager ID="ScriptManager1" runat="server"
EnablePartialRendering="true" />

<asp:DropDownList ID="DropDownList1" runat="server"
AutoPostBack="True">
 <asp:ListItem Value="1">Jan</asp:ListItem>
 <asp:ListItem Value="2">Feb</asp:ListItem>
 <asp:ListItem Value="3">Mar</asp:ListItem>
 <asp:ListItem Value="4">Apr</asp:ListItem>
 <asp:ListItem Value="5">May</asp:ListItem>
 <asp:ListItem Value="6">Jun</asp:ListItem>
 <asp:ListItem Value="7">Jul</asp:ListItem>
 <asp:ListItem Value="8">Aug</asp:ListItem>
 <asp:ListItem Value="9">Sep</asp:ListItem>
 <asp:ListItem Value="10">Oct</asp:ListItem>
 <asp:ListItem Value="11">Nov</asp:ListItem>
 <asp:ListItem Value="12">Dec</asp:ListItem>
</asp:DropDownList>

Year

<asp:DropDownList ID="DropDownList2" runat="server"
AutoPostBack="True">
<asp:ListItem>2005</asp:ListItem>
<asp:ListItem>2006</asp:ListItem>
<asp:ListItem>2007</asp:ListItem>
</asp:DropDownList><br />

  然后在code-behind的代码中,写入如下代码:

Protected Sub DropDownList1_SelectedIndexChanged( _
ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles DropDownList1.SelectedIndexChanged
With Calendar1
.VisibleDate = New Date( _
DropDownList2.SelectedValue, _
DropDownList1.SelectedValue, 1)
End With
End Sub

Protected Sub DropDownList2_SelectedIndexChanged( _
ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles DropDownList2.SelectedIndexChanged
With Calendar1
.VisibleDate = New Date( _
DropDownList2.SelectedValue, _
DropDownList1.SelectedValue, 1)
End With
End Sub

  在上面的代码中,分别为月份和年份的下拉选择框的selectedindexchanged事件写入了代码,主要是控制当用户选择了月份和年份时,日历控件中显示相应的日期。但当我们F5运行时,会发觉页面依然会引起postback刷新的。因此,我们要定义触发器triggers。

  所谓的触发器,指定了发生动作的事件源,UpdatePanel提供两种引发异步PostBack的Trigger ,分别是ControlEventTrigger和ControlEventTrigger。其中ControlEventTrigge是指当某个控件的某个指定的属性变化时更新,而ControlEventTrigger是指当指定的事件发生时进行更新。则我们修改代码如下:

<atlas:UpdatePanel ID="id1" runat="server">
<ContentTemplate>
<asp:Calendar ID="Calendar1" runat="server"
BackColor="#FFFFCC" ... />
</asp:Calendar>
</ContentTemplate>

<Triggers>
<atlas:ControlValueTrigger ControlID="DropDownList1"
PropertyName="SelectedValue" />
<atlas:ControlEventTrigger ControlID="DropDownList2"
EventName="SelectedIndexChanged" />
</Triggers>
</atlas:UpdatePanel>

  这里,分别指定了月份下拉框的属性触发器和年份下拉框的事件触发器,使得无论当用户选择哪一个下拉框时,都会引发局部的刷新,而这些刷新全部都通过updatepanel控件来封装进行处理了。所以当运行程序时,页面不会象以前那样要进行一次postback和整体页面的刷新。

  最后,我们再在日历控件下面,增加一个进度状态条控件UpdateProgress,用来向用户反映当前的进度,代码如下所示

<atlas:UpdateProgress ID="pro" runat="server">
<ProgressTemplate>
<asp:Label ID="Label1" runat="server" Text="Label">
Updating Calendar...
</asp:Label>
</ProgressTemplate>
</atlas:UpdateProgress>

  要注意的是,上面我们在进度状态控件的<ProgressTemplate>中,我们只是简单加入了一个标签控件,如果有实际需要的话,我们是可以加入 图片的。

  到此,我们的程序大功告成了,运行这个日历程序,选择月份和年份下拉框,会看到日历控件没有象以前那样引起整个页面的刷新,而是很快在日历控件中显示出相应的日期。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值