Atlas 第一篇[ScriptManager]

  1上个星期我们讨论了微软以Atlas形式来应对AJAX的潮流。Atlas基本上就是一个用来创建跨浏览器、跨平台的AJAX应用程序的ASP.NET 2.0框架。
  2
  3微软最近发布了四月社区技术预览(April Community Technology Preview)并声明认为已经准备好发布live许可证了。了解到这之后,我们将讨论Atlas的核心:ScriptManager类。
  4
  5关注的焦点
  6
  7ScriptManager类管理着Web页面上的所有Atlas组件。此外,它还会处理部分页面的更新并生成客户脚本,让你可以通过使用代理对象访问来自JavaScript的Web服务方法。
  8
  9每个使用Atlas组件的页面都只能带有一个ScriptManager控件,它在Web页面的开始部分公开。它会注册Atlas脚本,把它们放在页面上供使用。如果你正在使用ASP.NET 2.0,那么你可以在主页面上放一个ScriptManager控件,这样它就可以被使用主页面的所有页面用到了。ScriptManager控件的句法见列表A:
 10
 11<atlas:ScriptManager
 12EnablePartialRendering="true|false"
 13EnableScriptComponents="true|false"
 14ID="string"
 15runat="server" >
 16<Scripts>
 17<atlas:ScriptReference
 18Browser="browser reference"
 19Path="script file path"
 20ScriptName="script file name" />
 21</Scripts>
 22<Services>
 23<atlas:ServiceReference
 24GenerateProxy="true|false"
 25Path="server path name"
 26Type="type name" />
 27</Services>
 28</atlas:ScriptManager> 
 29现在让我们更加仔细地看看ScriptManager控件声明的各个部分。
 30
 31EnablePartialRendering:这个属性用来表示是否激活部分生成。部分生成用来只重新加载部分页面。如果为“真”的话,那么异步控件的常规回发就只显示发送给客户端的增量变化。 
 32EnableScriptComponents:这个属性用来控制Atlas的哪一部分在默认情况下可以用在客户端上。它会确定用于用户界面组件、行为、行为绑定和XML脚本编写的Atlas脚本在默认情况下是否可以被下载到客户端上。如果为“伪”的话,你可以在ScriptReference元素里下载具体的组件。 
 33ScriptReference:这个元素(它必须被包括在Scripts元素里)让你可以能够添加没有自动包括进来的脚本。脚本要用Path属性来指定,你还可以用Browser属性来为脚本指定一个浏览器。Atlas的确包括一些在默认情况下不会被发送给客户端的脚本;这些脚本可以用ScriptName脚本来添加。这样的脚本包括AtlasUIDragDrop、AtlasUIGlitz和AtlasUIMap。 
 34ServiceReference:这个元素可以让你指定要被用在页面脚本里的Web服务。Type属性可以是任何合法的MIME类型。GenerateProxy属性让你能够临时中止为Scripts集合里列出的服务生成代理对象。 
 35列表B里的Web页面使用了一个本地Web服务(尽管这个服务可以是任何服务):
 36
 37<%@ Page Language="C#" %>
 38<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 39"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 40<html xmlns="http://www.w3.org/1999/xhtml" >
 41<head id="hd">
 42<title>TR Sample</title>
 43<atlas:ScriptManager ID="scriptManager" runat="server" 
 44EnablePartialRendering="false"
 45EnableScriptComponents="false" >
 46<Services>
 47<atlas:ServiceReference Path="testService.asmx" GenerateProxy="true"聽 />
 48</Services>
 49<Scripts>
 50<atlas:ScriptReference Path="AtlasRuntime.js" />
 51</Scripts>
 52</atlas:ScriptManager>
 53<script type="text/javascript">
 54function callWebService() {
 55testService.displayTime("request data", handleResponse);
 56}

 57function handleResponse(response) {
 58alert("Server response: " + response);
 59}

 60</script></head>
 61<body>
 62<form id="frmTR" runat="server">
 63<div>
 64<p><input type="button" onclick="callWebService()" value="Call Web Service" /></p>
 65</div></form></body></html> 
 66页面会声明Web服务参考,后者后来用在JavaScript里来使用其唯一的方法。部分页面生成被禁用,调用所有的脚本库也被禁用。ScriptReference部分参考了AtlasRuntime脚本库(随Atlas一起安装),所以基本的功能是可用的。这个服务的源代码见列表C:
 67
 68<%@ WebService Language="C#" Class="testService" %>
 69using System;
 70using System.Web;
 71using System.Web.Services;
 72using System.Web.Services.Protocols;
 73[WebService(Namespace = "http://tempuri.org/")]
 74[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
 75public class testService : System.Web.Services.WebService {
 76[WebMethod]
 77public string displayTime() {
 78return DateTime.Now.ToString();
 79}
 }
 
 80虽然你被严格限制在一个Web页面上只能使用一个ScriptManager控件的实例,但是你可能想要往页面上添加额外的脚本或者服务参考。在这种情况下,ScriptManagerProxy控件就有了用武之地。
 81
 82<atlas:ScriptManagerProxyrunat="server" id="smProxy">
 83
 84</atlas:ScriptManagerProxy> 
 85当ScriptManager对象已经被声明的时候,如果你需要使用额外的脚本(ScriptReference元素),这个控件就非常有用。一个典型的例子用到了ASP.NET 2.0,并把一个ScriptManager对象放在主页面里。使用主页面的页面可能需要使用额外的脚本,所以代理对象可以用了。它的句法与普通的ScriptManager控件是一样的。
 86
 87其他控件
 88
 89尽管ScriptManager控件是基于Atlas的Web页面的焦点,但是这个框架还提供了一些直接可用的控件,这样通过少量的编程就可以增强Web页面的效果。下面就是最新版的Atlas里包括的一些控件:
 90
 91AutoCompleteExtender:让你扩展文本框控件来提供自动完成功能。这个Web服务被用来提供建议数据。 
 92DragOverlayExtender:你可以把服务器控件变成一个可以随着鼠标和键盘活动的浮动控件。 
 93ProfileScriptService:用来创建一个用来访问ASP.NET用户配置文件的客户端配置组件。 
 94TimerControl:用来创建一个客户端计数器,按照固定的时间间隔进行回发。 
 95Atlas的Web网站上有很多例子,但是DragOverlayExtender控件是最酷和最容易实现的一个。基本上,你可以创建一个控件并把它指派给DragOverlayExtender控件的TargetControlID属性的实例,以便让其工作。列表D里的例子说明了它把图像移动到页面周围的用法:
 96
 97<%@ Page Language="C#" %>
 98<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 99"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
100<html xmlns="http://www.w3.org/1999/xhtml" >
101<head id="hd">
102<title>Drag-n-Drop</title>
103<atlas:ScriptManager ID="scriptManager" runat="server" 
104EnablePartialRendering="false"
105EnableScriptComponents="true" >
106</atlas:ScriptManager>
107</head>
108<body>
109<form id="frmTest" runat="server">
110<asp:Imagerunat="server" ImageUrl="~/testimage.JPG" id="imgTest" />
111<atlas:DragOverlayExtender ID="doe" runat="Server">
112<atlas:DragOverlayProperties Enabled="True" TargetControlID="imgTest" />
113</atlas:DragOverlayExtender>
114</form></body></html> 
115其他信息
116
117系统管理员没有必要使用Atlas——你只用把Microsoft.Web.Atlas.dll文件复制到项目的\bin目录下,并把Atlas的\ScriptLibrary目录里的.js复制到你的项目里就行了。
118
119此外,虽然Atlas打着微软的标签,但是它适用于所有的浏览器。基于Atlas控件的所有样式都是用层叠样式表(CSS)完成的。此外,Atlas允许你根据需要开发针对不同浏览器的内容。
120
121最后,有些观点认为Atlas只是把开发人员从Firefox和Opera上转移开的一种策略,这两个浏览器仍旧不断在浏览器市场上获得更多的份额。虽然我们确信微软了解其竞争对手的行动,但是我并不十分担心这个软件巨头的动机;我只希望得到能够让我为客户创建强大解决方案的技术。Atlas可能(或许无法)在它最终发布的时候满足这一要求,但是到目前为止我还是对已经看到的东西十分满意。
122
123
posted @ 2006-10-02 22:14  RicoRui  阅读(722)  评论(0编辑  收藏  举报