二.ASP.NET Ajax架构:

       Ajax技术加强了很多ASP.NET本身的弱项。本章要继续讨论的Ajax基本技术是:

n         ASP.NET Ajax 基本框架

n         ASP.NET Ajax Library

n         多浏览器兼容层

n         微软Ajax

n         了解客户端事件循环周期

n         服务端组件和控件

n         Javascript文件

n         理解ASP.NET Ajax 配置文件Web.config

ASP.NET Ajax基本框架

Ajax模式下,web程序由以前的单服务端处理变成了客户端和服务端共同工作的情况。在客户端包括了ASP.NET AJAX 基于客户端的扩展(包括JavaScript库,控件,等等),javascript代码和HTML,在服务端包含了IISASP.NET 运行库(.NET Framwork ASP.NET 组件)以及ASP.NET AJAX基于服务的扩展包(控件,组件,程序集等等)。

代码库

Code LibraryASP.NET Ajax中分为两个主要物理块: 客户端功能块和服务端功能块。他包含了所有的JavaScript文件,正是这些文件时ASP.NET Ajax工作的魔力源泉。JavaScript文件包含了丰富的面向对象模型的代码。虽然服务端的功能需要Microsoft Ajax Library的支持,但是对客户端功能却并非是必须的,这使得他可以运行在任何服务器平台上,包括LinuxApache等等。

       ASP.NET AJAX还提供了一个服务端运行库,包括一系列组件和控件,如updatePanel,通过updatePanel可以使Ajax开发更加快捷甚至零代码。从开发者的角度来看,客户端层和服务端层经常要在一起协作,不过他们的工作是很简单的。比如你正开发一个服务端功能,你可能会使用updatePanel,然后你不需要对客户端进行编码,因为updatePanel已经为你做好了,你只需要一些简单的开发。             

多浏览器兼容层

       Microsoft Ajax 运行库已经是以跨浏览的目标编写的,因此,这些javascript代码都是可以跨常用的浏览器运行的,幸运的是,这些都是自动完成的。我们不需要担心,但是为了使我们自己写的代码能够跨浏览器,我们最好能对Microsoft Ajax运行库进行深入的了解和学习。

Microsoft Ajax运行库

       新的javascript推荐使用以面向对象机制进行编码,并且加入的类,继承,接口,命名空间,媒介和反射。Javascript还变得使C#开发人员更加熟悉,因为他加入StringBuilderTimers。下面是Microsoft Ajax运行库的命名空间结构:

命名空间

描述

Global

包括 array,Boolean,String,error,Number和对象等javascript已有的类型的扩展。

Sys

类似于.NET FrameworkSystem,是命名空间的根元素,包括了一些基本的类,ApplicationstringBuilder等。还包括了一些常用的接口,如IDisposableINotifyPropertyChange等。

Sys.Net

包含了网络通信的一些基本对象,如WebRequestXMLHttpExccutor等,Sys.Net本质上是对客户端/服务端通信的压缩封装。

Sys.Serialization

用于在服务器和客户端通信时的对象序列化操作。

Sys.Webforms

包含PageRequestManager等对象,是ASP.NET Ajax局部刷新技术的划分(?

Sys.UI

包含了用户接口有关的机制,如控件,事件和枚举等等。

Sys.Services

提供对ASP.NET 服务端服务,如验证和profile service

 

       ASP.NET Ajaxjavascript编程变得越来越想C#编程,正是微软的努力使的.NET开发人员能更快的掌握JavaScript编程,并进行快速开发。

Client-Side 事件循环周期

正如ASP.NET的服务器循环周期一样(一连串的OnPreLoadOnLoad事件等)。ASP.NET Ajax也存在一个客户端循环周期。了解这个周期将使你更加深刻的了解ASP.NET Ajax技术原理。

事件

描述

InitializeRequest

当异步请求第一次初始化时激发此事件,在这里可以检测请求并决定是否通行。

beginRequest

ASP.NET Ajax准备完毕并向服务器提交请求之前激发,这通常用来向用户显示一个提示信息,表示请求开始。

PageLoading

当客户端获得服务器响应并刷新页面之前激发。

pageLoaded

在初始化页面载入时激发的唯一事件。

EndRequest

当页面获得服务器响应并显示相应结果后激发,这里通常可以隐藏先前的提示信息,并表示请求周期结束。

这些事件可以通过PageRequestManager类来访问,后面的章节会提供一个例子演示。

服务端组件和控件

ASP.NET Ajax提供了新的组件,控件和类。这些基于服务端的功能深深依赖于Microsoft Ajax library中的javascript类。

当你安装完ASP.NET Ajax以后,在机器的全局程序集缓存(Global Assembly Cache,在系统跟目录下)将会添加System.Web.Extensions 程序集。通过该程序集我们就可以进行基于服务端的新组件,控件的开发了。

服务端命名空间

描述

System.Web.Configuration

提供对ASP.NET Ajax 配置文件Web.config的控制。

System.Web.Handlers

提供对script下载最优化支持。

System.Web.Script.Serlialization

提供了对JSON的序列化和反序列化扩展。

System.Web.Script.Services

提供对webService的调用功能。

System.Web.UI

提供了script管理功能和网络通信代码

System.Web.UI命名空间包含了大部分服务端功能模块。它的一些子空间如System.Web.UI.Compatability是重要的空间扩展了ASP.NET 验证控件的功能。System.Web.UI.Design控件提供了对ASP.NET Ajax自定义扩展功能。

服务端控件

控件描述

ScriptManager

运行时隐藏,是每个Ajax页面必须的控件并且只能有一个实例,管理着客户端脚本。

ScriptManagerProxy

运行时隐藏,在母版结构页面中使用。

UpdatePanel

updatepanel内部的控件都能够获得局部刷新的支持。

UpdateProgress

显示了一个状态用于长时间的异步请求提示信息。

Timer

按指定时间周期执行客户端事件。

ScriptManager管理着客户端脚本文件,提供了更有效的载入支持。并提供一些错误处理,更多的配置会在以后研究。

当使用母版页时,你就会用到ScriptManagerProxy控件,具体方法暂时不多讨论。

Updatepanel提供了一种最快最简单的局部刷新技术,他决定了页面哪些部分会局部刷新,所有在他内部的控件都可以获得局部刷新支持。这些刷新可以被一系列事件或Timer控件触发,更多讨论会在后面提及。

当访问数据库等比较耗时的请求时,updateprocess控件就可以提供一个动态的提示信息用于通知用户,请求正在执行。具体用法会在后面提及。

Timer控件用法也比较简单。

JavaScript文件

Javascript文件保存在program files\microsoft ASP.NET\ASP.NET 2.0 Ajax Extensions\V1.0.x\MicrosoftAjaxLibrary\System.Web.Extensions\V1.0.x 文件夹下。主要包括:

文件

说明

MicrosoftAjax.js

最常见的javascript文件,包含了大多数Ajax库的代码。

MicrosoftAjaxWebForms.js

包含了ASP.NET Ajax WebForms框架代码。

MicrosoftAjaxTimer.js

Timer控件的代码,比较小的文件。

理解ASP.NET Ajax 配置文件Web.config

<configuration>

           <sectionname="profileService"type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"requirePermission="false"allowDefinition="MachineToApplication" />

          <sectionname="authenticationService"type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"requirePermission="false"allowDefinition="MachineToApplication" />

        </sectionGroup>

      </sectionGroup>

    </sectionGroup>

 </configSections>

<profileService>模块主要用于在你的网站需要记录用户个人信息的时候,比如当你需要记录某个用户拖拽的位置信息,此时会用到该属性。具体应用会在后面提及。

< authenticationService>模块主要用于网站用户控制,当你的网站是匿名访问时就不需要该项功能.

    <pages>

      <controls>

        <addtagPrefix="asp"namespace="System.Web.UI"assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

      </controls>

</pages>

这项模块在全局注册了Ajax服务器控件,从而使的每个页面不需要重复引用.

    <compilationdebug="false">

      <assemblies>

        <addassembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

      </assemblies>

    </compilation>

编译模块定义了页面的测试属性,在调试时一般将debug设置为true从而使页面提供更多的调试信息,当网站发布时应该将其设置为false.

    <httpHandlers>

      <removeverb="*"path="*.asmx"/>

      <addverb="*"path="*.asmx"validate="false"type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

      <addverb="*"path="*_AppService.axd"validate="false"type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

      <addverb="GET,HEAD"path="ScriptResource.axd"type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"validate="false"/>

    </httpHandlers>

Remove模块移去了asp.net默认的webservice方式,add模块在随后定义了ASP.NET Ajax方式的webservice.最后一项add部分定义了脚本文件应该通过ASP.NET Ajax HTTP handler方式下载从而具有更高的性能和合理的顺序.

    <httpModules>

      <addname="ScriptModule"type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

    </httpModules>

 </system.web>

这项定注册了Ajax使用的HTTP Model.

posted on 2008-01-09 23:59  朱胜  阅读(933)  评论(0编辑  收藏  举报