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
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