1
上个星期我们讨论了微软以Atlas形式来应对AJAX的潮流。Atlas基本上就是一个用来创建跨浏览器、跨平台的AJAX应用程序的ASP.NET 2.0框架。
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
微软最近发布了四月社区技术预览(April Community Technology Preview)并声明认为已经准备好发布live许可证了。了解到这之后,我们将讨论Atlas的核心:ScriptManager类。
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
关注的焦点
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
ScriptManager类管理着Web页面上的所有Atlas组件。此外,它还会处理部分页面的更新并生成客户脚本,让你可以通过使用代理对象访问来自JavaScript的Web服务方法。
8![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
每个使用Atlas组件的页面都只能带有一个ScriptManager控件,它在Web页面的开始部分公开。它会注册Atlas脚本,把它们放在页面上供使用。如果你正在使用ASP.NET 2.0,那么你可以在主页面上放一个ScriptManager控件,这样它就可以被使用主页面的所有页面用到了。ScriptManager控件的句法见列表A:
10![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
<atlas:ScriptManager
12
EnablePartialRendering="true|false"
13
EnableScriptComponents="true|false"
14
ID="string"
15
runat="server" >
16
<Scripts>
17
<atlas:ScriptReference
18
Browser="browser reference"
19
Path="script file path"
20
ScriptName="script file name" />
21
</Scripts>
22
<Services>
23
<atlas:ServiceReference
24
GenerateProxy="true|false"
25
Path="server path name"
26
Type="type name" />
27
</Services>
28
</atlas:ScriptManager>
29
现在让我们更加仔细地看看ScriptManager控件声明的各个部分。
30![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
31
EnablePartialRendering:这个属性用来表示是否激活部分生成。部分生成用来只重新加载部分页面。如果为“真”的话,那么异步控件的常规回发就只显示发送给客户端的增量变化。
32
EnableScriptComponents:这个属性用来控制Atlas的哪一部分在默认情况下可以用在客户端上。它会确定用于用户界面组件、行为、行为绑定和XML脚本编写的Atlas脚本在默认情况下是否可以被下载到客户端上。如果为“伪”的话,你可以在ScriptReference元素里下载具体的组件。
33
ScriptReference:这个元素(它必须被包括在Scripts元素里)让你可以能够添加没有自动包括进来的脚本。脚本要用Path属性来指定,你还可以用Browser属性来为脚本指定一个浏览器。Atlas的确包括一些在默认情况下不会被发送给客户端的脚本;这些脚本可以用ScriptName脚本来添加。这样的脚本包括AtlasUIDragDrop、AtlasUIGlitz和AtlasUIMap。
34
ServiceReference:这个元素可以让你指定要被用在页面脚本里的Web服务。Type属性可以是任何合法的MIME类型。GenerateProxy属性让你能够临时中止为Scripts集合里列出的服务生成代理对象。
35
列表B里的Web页面使用了一个本地Web服务(尽管这个服务可以是任何服务):
36![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
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"
44
EnablePartialRendering="false"
45
EnableScriptComponents="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">
54
function callWebService() {
55
testService.displayTime("request data", handleResponse);
56
}
57
function handleResponse(response) {
58
alert("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![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
68
<%@ WebService Language="C#" Class="testService" %>
69
using System;
70
using System.Web;
71
using System.Web.Services;
72
using System.Web.Services.Protocols;
73
[WebService(Namespace = "http://tempuri.org/")]
74
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
75
public class testService : System.Web.Services.WebService {
76
[WebMethod]
77
public string displayTime() {
78
return DateTime.Now.ToString();
79
} }
80
虽然你被严格限制在一个Web页面上只能使用一个ScriptManager控件的实例,但是你可能想要往页面上添加额外的脚本或者服务参考。在这种情况下,ScriptManagerProxy控件就有了用武之地。
81![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
82
<atlas:ScriptManagerProxyrunat="server" id="smProxy">
83![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/dot.gif)
84
</atlas:ScriptManagerProxy>
85
当ScriptManager对象已经被声明的时候,如果你需要使用额外的脚本(ScriptReference元素),这个控件就非常有用。一个典型的例子用到了ASP.NET 2.0,并把一个ScriptManager对象放在主页面里。使用主页面的页面可能需要使用额外的脚本,所以代理对象可以用了。它的句法与普通的ScriptManager控件是一样的。
86![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
87
其他控件
88![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
89
尽管ScriptManager控件是基于Atlas的Web页面的焦点,但是这个框架还提供了一些直接可用的控件,这样通过少量的编程就可以增强Web页面的效果。下面就是最新版的Atlas里包括的一些控件:
90![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
91
AutoCompleteExtender:让你扩展文本框控件来提供自动完成功能。这个Web服务被用来提供建议数据。
92
DragOverlayExtender:你可以把服务器控件变成一个可以随着鼠标和键盘活动的浮动控件。
93
ProfileScriptService:用来创建一个用来访问ASP.NET用户配置文件的客户端配置组件。
94
TimerControl:用来创建一个客户端计数器,按照固定的时间间隔进行回发。
95
Atlas的Web网站上有很多例子,但是DragOverlayExtender控件是最酷和最容易实现的一个。基本上,你可以创建一个控件并把它指派给DragOverlayExtender控件的TargetControlID属性的实例,以便让其工作。列表D里的例子说明了它把图像移动到页面周围的用法:
96![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
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"
104
EnablePartialRendering="false"
105
EnableScriptComponents="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![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
117
系统管理员没有必要使用Atlas——你只用把Microsoft.Web.Atlas.dll文件复制到项目的\bin目录下,并把Atlas的\ScriptLibrary目录里的.js复制到你的项目里就行了。
118![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
119
此外,虽然Atlas打着微软的标签,但是它适用于所有的浏览器。基于Atlas控件的所有样式都是用层叠样式表(CSS)完成的。此外,Atlas允许你根据需要开发针对不同浏览器的内容。
120![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
121
最后,有些观点认为Atlas只是把开发人员从Firefox和Opera上转移开的一种策略,这两个浏览器仍旧不断在浏览器市场上获得更多的份额。虽然我们确信微软了解其竞争对手的行动,但是我并不十分担心这个软件巨头的动机;我只希望得到能够让我为客户创建强大解决方案的技术。Atlas可能(或许无法)在它最终发布的时候满足这一要求,但是到目前为止我还是对已经看到的东西十分满意。
122![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
123![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
61
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
62
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
63
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
64
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
65
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
66
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
68
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
69
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
70
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
71
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
72
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
73
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
74
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
75
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
76
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
77
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
78
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
79
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
80
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
81
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
82
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
83
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/dot.gif)
84
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
85
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
86
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
87
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
88
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
89
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
90
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
91
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
92
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
93
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
94
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
95
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
96
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
97
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
98
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
99
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
100
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
101
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
102
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
103
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
104
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
105
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
106
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
107
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
108
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
109
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
110
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
111
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
112
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
113
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
114
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
115
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
116
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
117
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
118
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
119
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
120
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
121
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
122
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
123
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)