ASP.NET Atlas 为AJAX网站提供支持(1)(4)
服务器控件
通过 Atlas CTP 中所包含的服务器控件,可以轻松避免页面回发过程中伴随出现的暂停。当控件在后台更新其呈现时,用户可以继续与页面交互。为实现这一目的,两个服务器控件协同工作。可以将其添加到现有页面以大幅改善效果。ScriptManager 控件修改客户端回发行为,而 UpdatePanel 控件管理服务器上的页面生命周期,以此来实现这种改变。
所有使用 Atlas 功能的页面必须包括 ScriptManager 控件。它负责协调将哪个 JavaScript 发送到客户端。服务器控件可以为客户端提供 JavaScript,并利用 ScriptManager 控件来处理该脚本。ScriptManager 控件将利用该控件实现的新的 IScriptComponent 接口。ScriptManager 控件还提供对与 xml 脚本元素关联的组件脚本库的支持。
将 ScriptManager 控件的 EnablePartialRendering 属性设置为 true 将导致来自客户端的回发出现以下新的行为:
回发行为被修改,以便在不中断用户体验的情况下允许发生请求。对于部分呈现的请求,需维护为在各请求之间保持控件信息所需的视图状态信息。正在刷新或修改的区域的 HTML 代码将通过 JavaScript 与浏览器文档对象模型 (DOM) 的交互而更新。页面上应允许部分更新的区域将在 ASP.NET 页面中通过 UpdatePanel 控件来指定。
UpdatePanel 控件向 ScriptManager 控件指示在页面上哪些区域应单独更新。当浏览器中的操作导致产生该页面区域的回发时,将发送窗体数据并且在服务器上开始执行该页面的生命周期。因为脚本是在后台异步启动回发,因此仍然向用户显示该页面。在服务器上,将从客户端发送来的视图状态数据恢复控件状态。呈现阶段发生时,ScriptManager 控件将隔离 UpdatePanel 区域的呈现,因为该区域的呈现正在被回送到浏览器。系统还将收集页面的视图状态数据,并作为响应的一部分伴随 HTML 一起发送。然后浏览器中的脚本将用新的 HTML 替代与 UpdatePanel 内容的先前呈现对应的 HTML。
UpdatePanel 控件可以包含 Triggers 和 ContentTemplate 的元素:
... ... |
ContentTemplate 内的区域在 ScriptManager 控件管理异步回发时刷新。Triggers 元素可以包含 ControlEventTrigger 和 ControlValueTrigger 元素。使用 Triggers 元素,页面开发人员可以指定应导致区域更新的特定更改。这允许 UpdatePanel 控件之外的其他控件无需直接包含在 UpdatePanel 控件之内,即可导致更改。它还允许使用简单的声明来控制页面和 UpdatePanel 控件的行为,并指示何时检索新数据。
在一个页面上可放置多个 UpdatePanel 控件,并通过不同的触发器来导致它们单独更新。UpdatePanel 控件的内容可以控制在响应特定用户输入所必需的最低范围内。使用 UpdatePanel 控件,现有 ASP.NET 页面无需大量更改,即可使用户感到响应更及时。
Web 服务
Web 应用程序是围绕面向服务的体系结构构建的。支持交互式应用程序的核心是支持从浏览器访问服务。Atlas 支持两种不同类型的服务。ScriptManager 控件将使用自动生成的代理供 Web 服务引用:
然后客户端组件可以直接从脚本调用 Web 服务。Web 服务被绑定到控件以支持更丰富的行为。例如,可在 xml 脚本中将 AutoCompleteBehavior 定义为使用 Web 服务检索相关可能性。
行为被附加到页面上某一元素并增强其行为。此行为在 .aspx 标记中建立之后,即被称作“扩展器”。AutoCompleteBehavior 可以通过使用 AutoCompleteExtender 控件与元素关联。扩展器无需直接编写 xml 脚本,即可与服务器上的控件关联。然后控件行为将通过呈现适当的 xml 脚本以获取客户端行为而得到扩展。调用 Web 服务时,调用以及返回结果通常均以 XML 格式传递。Atlas 还支持以 JSON 形式序列化来自 Web 服务的数据,这消除了 XML 中的某些内在的开销。JSON 数据可以在浏览器中直接反序列化成 JavaScript 对象。Atlas 支持将服务器中由 .NET 管理的更为复杂的类型序列化成浏览器中典型的 JavaScript 对象。这简化了从浏览器访问 Web 服务的任务。
从浏览器使用 Web 服务的想法从作为应用程序一部分的自定义 Web 服务,延伸到了 ASP.NET 应用程序服务。Atlas 提供直接从 JavaScript 使用窗体身份验证服务的功能:
Sys.Services.AuthenticationService.login( username,password,completionFunction); |
用户不必重定向到登录页面,然后再返回原始页面;于是可以在用户提供登录凭据时动态修改 HTML。.aspx 页面中可用的配置文件数据也可以通过 Web 服务调用获取。它支持通过 JavaScript 对象存储和检索存储在服务器上的配置文件数据。
应用程序可能使用的 Web 服务始终位于同一主机服务器上。实际上,它们甚至不必在同一个域内。浏览器将阻止使用 XmlHttpRequest 调用到页面所在的域之外的其他域。存在一些巧妙的方式来绕过此限制,即通过使用隐藏 IFrame 对象来启动子请求,但仍然麻烦。Atlas 提供了 Web 服务桥接功能来支持此应用场合。客户端可以启动一个 Web 服务调用,而目标在另一个域。调用被发送至源起 Atlas 应用程序,然后后者代理用户请求目标服务器,再将结果序列化并返回客户端。Atlas 还能够使用 IFrame 技术直接与其他域通信。
小结
Atlas 提供一组功能,可用于创建更丰富的 Web 应用程序。客户端脚本库简化了编写 JavaScript 的任务,并提供构造代码以使用面向对象的方法编写 JavaScript。使用 Web 服务功能,可轻松访问远程和本地服务。复杂类型的序列化使从客户端和服务器利用丰富类型变得轻松。服务器控件利用客户端脚本库并允许现有的和新的应用程序大大降低目前 Web 应用程序中常见的服务遇忙暂停的发生。
现在,每隔 1 个月就会发布新的 CTP 版本,其中包括修复、更改和新增功能。Atlas 最终会在 Visual Studio 中将这些集成到下一版本的 .NET Framework(带设计时支持)。最近,Microsoft 已宣布推出有限许可,允许用户在实际站点上部署 Atlas,并开始在 Web 应用程序中利用 Atlas。有关详细信息及下载最新 Atlas CTP,请访问 atlas.asp.net。
(责任编辑:铭铭 mingming_ky@126.com TEL:(010)68476636)