asp学习网: 首页 >> asp.net >> asp.net ajax框架 Atlas实现机制浅析

asp.net ajax框架 Atlas实现机制浅析

asp.net ajax框架 Atlas实现机制浅析
原文发布于

http://www.blogcn.com/

作者

flier_lu

参考:http://atlas.asp.net

[0] 概述

上周 MS 发布了面向 ASP.NET 的 AJAX 框架 —— Atlas 最新 CTP 2006.1 预览版。

与 .NET 和 Java 平台下其它 AJAX 框架相比,Altas 最大的亮点就在于与 ASP.NET 现有机制的无缝融合。通过 VS.NET 集成开发环境,使用者可以在对 js 和 AJAX 不甚了解的情况下,以非常自然的方式使用到最先进的技术。此外直接在 js 一级提供 WebService 的调用支持,也大大降低了对 ws 技术的使用门槛。而 ASP.NET 中一直引以为豪的数据绑定等技术,也可以在 Altas 中无缝得到支持,让现有投资能够最大限度得到保护。从这些意义上来说,虽然 Altas 在 AJAX 理念上没有太多突破,但不失为一个强大且实用的 AJAX 框架,非常符合 MS 在技术运用上的一贯原则。

Altas 与 .NET 下其它 AJAX 框架的横行比较,可以参考这篇文章

Welcome to my comparison of AJAX frameworks for ASP.NET

[1] 整体结构

从整体结构上来看,Altas 的核心在于 <atlas:ScriptManager .../> 这个标签,所有支持 Altas 的页面都必须有且只有一个此标签,以引入 Altas 的基础架构支持。在此基础上,通过 <altas:UpdatePanel .../> 标签定义需要异步更新的范围,避免传统 Post Back 模式下的全页面刷新。而需要支持 AJAX 模式获取数据的控件,则可以通过 js 脚本和 xml 脚本两种方式定义,并由 Altas 框架进行动态 patch 以实现标准 web 控件的 AJAX 支持。此外就是 WebService 调用和数据绑定的支持机制,也是利用 Altas 框架的基础架构实现的。

1.1 ScriptManager

首先,ScriptManager 是一个容器,用户可以在 ScriptManager 标签下定义期望引用的其它 js 库,以及希望通过 js 直接调用的 WebService 服务。
例如在如下的定义中,ScriptManager 控件将保存对两个客户端 js 库和 ComplexService 服务的引用,并在页面 Render 的时候写入适当的支持代码。我们可以通过 ScriptManager.Scripts 和 ScriptManager.Services 属性访问类似定义。
1<atlas:ScriptManager runat="server" ID="UpdatePanel2"
2 EnableScriptComponents="True" EnablePartialRendering="True">
3 <Scripts>
4 <atlas:ScriptReference ScriptName="AtlasUIMap" />
5 <atlas:ScriptReference Path="~/MyScripts/MyScript.js" />
6 </Scripts>
7 <Services>
8 <atlas:ServiceReference Path="ComplexService.asmx" />
9 </Services>
10</atlas:ScriptManager>


其中 ScriptReference 非常简单,支持通过 ScriptName 或 Path 属性指定脚本。
ScriptName 指定 Altas 内建的库名称,在 FrameworkScript 类型中有具体定义。这个属性在有的文档和例子中,也直接称为 Name 属性,但最新的 Altas M1 中已改为 ScriptName。这个脚本类型将被通过 ScriptManager.ConvertFrameworkScriptToFileName 函数转换为对应的 js 文件名。
1public enum FrameworkScript
2{
3 Custom,
4 AtlasUIDragDrop, // "AtlasUIDragDrop.js";
5 AtlasUIGlitz, // "AtlasUIGlitz.js";
6 AtlasUIMap // "AtlasUIMap.js";
7}


如果直接使用 Path 则可以指定任意的用户自定义库。

此外还可以通过 ScriptReference.Browser 属性指定脚本适用于的浏览器,Altas 将根据客户端浏览器类型,自动选择加载合适的脚本。

而 ServiceReference 也非常类似,可以通过 Path 和 Type 属性指定 WebService 的 .asmx 路径和相关类型。如果 GenerateProxy 属性为 true 的话(缺省),则 ScriptManager 会为此服务自动生成 proxy 包装脚本;否则将依赖于后台的自动处理机制提供支持。具体的 WebService 实现原理,等后面进行分析时在详细解释。目前需要知道的是,如果打开 GenerateProxy 模式,则 Altas 会自动生成 proxy 包装脚本,并与 Scripts 中脚本一同在合适的时候写到页面。

除了 Scripts 和 Services 两类显式的元素外,ScriptManager 还提供 IScriptService 和 IScriptControl 两类接口实现对象的管理。
前者提供 Altas 自身的服务支持,例如用于提供诊断 API 的 ProfileScriptService 组件。
后者提供 Altas 服务端控件支持,例如用于服务端定时器的 TimerControl 控件。

所有这些涉及脚本的引用,都会在 ScriptManager.OnPagePreRenderComplete 事件中,调用 RenderXmlScript 方法写入到一个 xml 脚本中。
1<script src="ScriptLibrary/Atlas/Debug/Atlas.js" type="text/javascript"></script>
2
3<script type="text/xml-script">
4<page xmlns:script="http://schemas.microsoft.com/xml-script/2005">
5 <references>
6 <add src="ScriptLibrary/Atlas/Debug/AtlasUIMap.js" />
7 <add src="MyScripts/MyScript.js" />
8 <add src="ComplexService.asmx/js" />
9 </references>
10
11</page>
12</script>


值得注意的是,Altas 会自动根据 web.config 中 system.web/compilation 的配置,选择 Debug 或 Release 模式的脚本。Release 模式脚本删去了多余的空格等修饰负荷,少了一些调试方面的支持。如果希望对 Altas 的脚本直接进行修改,别忘了两个版本的代码进行同步。

from:asp学习网/title:asp.net ajax框架 Atlas实现机制浅析/ time:2007-5-9 0:06:52

本文主题ajax,asp.net

ASP.NET 2.0 异步页面原理浅析

ASP.NET中Session丢失原因与解决方案小结

asp.net:正确判断当前用户角色

推荐:http会话 ASP.NET中Session

asp,asp.net中的session 1

ASP.NET使用Cookie的基础

asp.net相关基础概念

Sharing Session State between ASP and ASP.NET

asp教程 ©2006-2007 aspxuexi.com | 关于站点 | 版权隐私 | 站内搜索
复制或者翻版 请于夜间进行