上个星期我们讨论了微软以Atlas形式来应对AJAX的潮流。Atlas基本上就是一个用来创建跨浏览器、跨平台的AJAX应用程序的ASP.NET 2.0框架。
微软最近发布了四月社区技术预览(April Community Technology Preview)并声明认为已经准备好发布live许可证了。了解到这之后,我们将讨论Atlas的核心:ScriptManager类。
关注的焦点
ScriptManager类管理着Web页面上的所有Atlas组件。此外,它还会处理部分页面的更新并生成客户脚本,让你可以通过使用代理对象访问来自JavaScript的Web服务方法。
每个使用Atlas组件的页面都只能带有一个ScriptManager控件,它在Web页面的开始部分公开。它会注册Atlas脚本,把它们放在页面上供使用。如果你正在使用ASP.NET 2.0,那么你可以在主页面上放一个ScriptManager控件,这样它就可以被使用主页面的所有页面用到了。ScriptManager控件的句法见列表A:
<atlas:ScriptManager
EnablePartialRendering="true|false"
EnableScriptComponents="true|false"
ID="string"
runat="server" >
<Scripts>
<atlas:ScriptReference
Browser="browser reference"
Path="script file path"
ScriptName="script file name" />
</Scripts>
<Services>
<atlas:ServiceReference
GenerateProxy="true|false"
Path="server path name"
Type="type name" />
</Services>
</atlas:ScriptManager>
现在让我们更加仔细地看看ScriptManager控件声明的各个部分。
- EnablePartialRendering:这个属性用来表示是否激活部分生成。部分生成用来只重新加载部分页面。如果为“真”的话,那么异步控件的常规回发就只显示发送给客户端的增量变化。
- EnableScriptComponents:这个属性用来控制Atlas的哪一部分在默认情况下可以用在客户端上。它会确定用于用户界面组件、行为、行为绑定和XML脚本编写的Atlas脚本在默认情况下是否可以被下载到客户端上。如果为“伪”的话,你可以在ScriptReference元素里下载具体的组件。
- ScriptReference:这个元素(它必须被包括在Scripts元素里)让你可以能够添加没有自动包括进来的脚本。脚本要用Path属性来指定,你还可以用Browser属性来为脚本指定一个浏览器。Atlas的确包括一些在默认情况下不会被发送给客户端的脚本;这些脚本可以用ScriptName脚本来添加。这样的脚本包括AtlasUIDragDrop、AtlasUIGlitz和AtlasUIMap。
- ServiceReference:这个元素可以让你指定要被用在页面脚本里的Web服务。Type属性可以是任何合法的MIME类型。GenerateProxy属性让你能够临时中止为Scripts集合里列出的服务生成代理对象。
列表B里的Web页面使用了一个本地Web服务(尽管这个服务可以是任何服务):
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="hd">
<title>TR Sample</title>
<atlas:ScriptManager ID="scriptManager" runat="server"
EnablePartialRendering="false"
EnableScriptComponents="false" >
<Services>
<atlas:ServiceReference Path="testService.asmx" GenerateProxy="true"聽 />
</Services>
<Scripts>
<atlas:ScriptReference Path="AtlasRuntime.js" />
</Scripts>
</atlas:ScriptManager>
<script type="text/javascript">
function callWebService() {
testService.displayTime("request data", handleResponse);
}
function handleResponse(response) {
alert("Server response: " + response);
}
</script></head>
<body>
<form id="frmTR" runat="server">
<div>
<p><input type="button" onclick="callWebService()" value="Call Web Service" /></p>
</div></form></body></html>
页面会声明Web服务参考,后者后来用在JavaScript里来使用其唯一的方法。部分页面生成被禁用,调用所有的脚本库也被禁用。ScriptReference部分参考了AtlasRuntime脚本库(随Atlas一起安装),所以基本的功能是可用的。这个服务的源代码见列表C:
<%@ WebService Language="C#" Class="testService" %>
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class testService聽 : System.Web.Services.WebService {
[WebMethod]
public string displayTime() {
return DateTime.Now.ToString();
} }