[转]初学 ASP.NET AJAX (一):构建 ASP.NET AJAX 开发环境
[转]初学 ASP.NET AJAX (一):构建 ASP.NET AJAX 开发环境
引自:http://www.cnblogs.com/cxy521/archive/2008/01/22/1048254.html
1 概述
Microsoft ASP.NET AJAX 是 Microsoft 公司对 Ajax 技术的完美封装。它能使你已快速的创建包含丰富用户体验的用户界面的 Web 页面,提供加入了跨浏览器的 ECMAScript(Javascript) 和动态 HTML(DHTML) 技术的客户端脚本,并与基于服务器的 ASP.NET 2.0 平台进行了集成。它还对 Javascript 进行了非常巧妙的面向对象方面的扩展,以提供对客户端面向对象编程的支持;提供了与 ASP.NET 紧密结合的客户端/服务器端组件、类型的自动转换;自动为客户端暴露服务器端的代码的方法;为远程 Web Service 提供本地客户端代理等许多优美的功能。使用 ASP.NET AJAX ,可以提高应用程序的用户体验和效率。
ASP.NET AJAX 由客户端脚本库和服务器端组件缓存,以提供一个健壮的开发框架。除了 ASP.NET AJAX 以外,还可以使用 ASP.NET AJAX Control Toolkit 和由社区提供的 ASP.NET AJAX Futures 的特性。
ASP.NET AJAX 的架构如下图所示:
图1 ASP.NET AJAX 服务器和客户端架构
2 下载ASP.NET AJAX 由客户端脚本库和服务器端组件缓存,以提供一个健壮的开发框架。除了 ASP.NET AJAX 以外,还可以使用 ASP.NET AJAX Control Toolkit 和由社区提供的 ASP.NET AJAX Futures 的特性。
ASP.NET AJAX 的架构如下图所示:
图1 ASP.NET AJAX 服务器和客户端架构
ASP.NET AJAX 必需组件包括:
ASP.NET 2.0 AJAX Extensions 1.0 :此下载安装用于开发和运行以服务器为中心或以客户端为中心的开发模型的 Ajax 类应用程序的框架,并且由 Microsoft 完全支持。在安装 ASP.NET Futures 或 ASP.NET AJAX Toolkit 之前必须安装它。另外,还可以下载ASP.NET AJAX 的文档 (非必需),文档中包含有可以帮助你最大限度的使用 ASP.NET AJAX 工作示例。
ASP.NET AJAX Control Toolkit :这是一个由示例和组件组成的共享源码社区项目,它使开发比以往使用 AJAX 控件和扩展的开发更加容易。Control Toolkit 提供了可运行的示例和丰富的 SDK 以简化定制 AJAX 控件和扩展程序的创建。
可选的组件包括:ASP.NET Futures (July 2007) 、ASP.NET 2.0 AJAX Extensions 1.0 源码 、示例应用程序 和 Microsoft AJAX Library ,可以根据需要进行下载。
3 安装
安装的顺序是先安装ASP.NET 2.0 AJAX Extensions 1.0,再安装ASP.NET AJAX Control Toolkit,再安装其他组件。所有的安装基本上都只要单击下一步即可,在此不再详述。
安装必需的组件包后,可以在新建网站的对话框中看到多了一项“ASP.NET AJAX-Enabled Web Site”,用它即可以新建经过基本配置的Ajax 网站,如图2所示:
图2 新建网站对话框
4 配置安装必需的组件包后,可以在新建网站的对话框中看到多了一项“ASP.NET AJAX-Enabled Web Site”,用它即可以新建经过基本配置的Ajax 网站,如图2所示:
ASP.NET AJAX 的配置在很多时候是在用于以前开发的没有使用 AJAX 的 ASP.NET 应用程序时才会注意到它,不过,了解这些配置,对于用好 ASP.NET AJAX 也是必不可少的。
在此仅对所有的配置元素进行了简要的介绍,在以后的使用中再详细对他们进行说明。
4.1 在新的 Web 站点中使用 ASP.NET AJAX Web 配置文件在此仅对所有的配置元素进行了简要的介绍,在以后的使用中再详细对他们进行说明。
当创建一个新的 ASP.NET AJAX Web 站点时,可以使用提供在安装包中的 Web.config 文件来添加配置设置。在 Visual Studio 中,用于 Microsoft ASP.NET AJAX 的 Web.config 文件在创建新的 “ASP.NET AJAX-enabled Web Site”时就已经包含在项目中。
如果要手工添加一个 Web.config 到新建的 Web 站点中,可以从安装目录获取它的一个副本,将它复制到站点的根目录下即可。默认情况下,该文件被放在下列位置:
如果要手工添加一个 Web.config 到新建的 Web 站点中,可以从安装目录获取它的一个副本,将它复制到站点的根目录下即可。默认情况下,该文件被放在下列位置:
驱动器:"Program Files"Microsoft ASP.NET"ASP.NET 2.0 AJAX Extensions"v1.0.nnnn
4.2 添加 ASP.NET AJAX 配置元素到已存在的 Web 站点中
对于一个已存在的站点,通常有一些值是要保留的,在这种情况下,就可以添加新的 ASP.NET AJAX 配置元素到已存在的 Web.config中去。
新的元素是下列配置节的组成部分:
4.2.1 <configSections> 元素新的元素是下列配置节的组成部分:
- <configSections> 元素
- <controls> 元素
- <assemblies> 元素
- <httpHandlers> 元素
- <httpModules> 元素
- <system.web.extensions> 元素
- <system.webserver> 元素
<configSections> 元素创建了用于 SystemWebExtensionsSectionGroup 类的配置节和子配置节,可以为<system.web.extensions>元素中的这些节设置属性。
下列示例展示了用于 ASP.NET AJAX 的<configSections>元素,可以将它添加到已存在的 Web.config 文件中做为 <configuration> 元素的子元素。更详细的信息,请参见 4.2.6 <system.web.extensions>元素。
4.2.2 <controls> 元素下列示例展示了用于 ASP.NET AJAX 的<configSections>元素,可以将它添加到已存在的 Web.config 文件中做为 <configuration> 元素的子元素。更详细的信息,请参见 4.2.6 <system.web.extensions>元素。
<configuration>
<configSections>
<sectionGroup name="system.web.extensions"
type="System.Web.Configuration.SystemWebExtensionsSectionGroup,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35">
<sectionGroup name="scripting"
type="System.Web.Configuration.ScriptingSectionGroup,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35">
<section name="scriptResourceHandler"
type="System.Web.Configuration.ScriptingScriptResourceHandlerSection,
System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35"
requirePermission="false"
allowDefinition="MachineToApplication"/>
<sectionGroup name="webServices"
type="System.Web.Configuration.ScriptingWebServicesSectionGroup,
System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<section name="jsonSerialization"
type="System.Web.Configuration.ScriptingJsonSerializationSection,
System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35"
requirePermission="false" allowDefinition="Everywhere" />
<section name="profileService"
type="System.Web.Configuration.ScriptingProfileServiceSection,
System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35"
requirePermission="false"
allowDefinition="MachineToApplication" />
<section name="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>
</configuration>
<configSections>
<sectionGroup name="system.web.extensions"
type="System.Web.Configuration.SystemWebExtensionsSectionGroup,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35">
<sectionGroup name="scripting"
type="System.Web.Configuration.ScriptingSectionGroup,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35">
<section name="scriptResourceHandler"
type="System.Web.Configuration.ScriptingScriptResourceHandlerSection,
System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35"
requirePermission="false"
allowDefinition="MachineToApplication"/>
<sectionGroup name="webServices"
type="System.Web.Configuration.ScriptingWebServicesSectionGroup,
System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<section name="jsonSerialization"
type="System.Web.Configuration.ScriptingJsonSerializationSection,
System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35"
requirePermission="false" allowDefinition="Everywhere" />
<section name="profileService"
type="System.Web.Configuration.ScriptingProfileServiceSection,
System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35"
requirePermission="false"
allowDefinition="MachineToApplication" />
<section name="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>
</configuration>
<controls> 元素注册了在 System.Web.Extensions 程序集中的 ASP.NET AJAX 命名空间,并为这些命名空间映射 asp 标记前缀别名。在ASP.NET AJAX 命名空间中的控件可以用以下形式在 Web 页面中使用:
<asp:ScriptManager ID="ScriptManager1" runat="server" />
下列示例展示了用于 ASP.NET AJAX 的<controls> 元素,可以将此节添加到已存在的 Web.config 文件中做为 <system.web><pages> 元素的一个子元素:<system.web>
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</controls>
</pages>
</system.web>
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</controls>
</pages>
</system.web>
4.2.3 <assemblies> 元素
<assemblies> 元素注册 System.Web.Extensions 程序集。
下例示例展示了用于 ASP.NET AJAX 的 <assemblies> 元素,可以将此节添加到已存在的 Web.config 文件中做为 <system.web><compilation> 元素的一个子元素:
4.2.4 <httpHandlers>元素下例示例展示了用于 ASP.NET AJAX 的 <assemblies> 元素,可以将此节添加到已存在的 Web.config 文件中做为 <system.web><compilation> 元素的一个子元素:
<system.web>
<compilation>
<assemblies>
<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</assemblies>
</compilation>
</system.web>
如果要调试该程序集,可以添加 <compilation> 的属性 debug="true" 。
<compilation>
<assemblies>
<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</assemblies>
</compilation>
</system.web>
<httpHandlers> 元素添加用于脚本请求的新的处理程序。
下例示例展示了用于 ASP.NET AJAX 的 <httpHandlers> 元素,可以将此节添加到已存在的 Web.config 文件中做为 <system.web> 元素的一个子元素:
下例示例展示了用于 ASP.NET AJAX 的 <httpHandlers> 元素,可以将此节添加到已存在的 Web.config 文件中做为 <system.web> 元素的一个子元素:
<system.web>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add verb="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>
</system.web>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add verb="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>
</system.web>
<httpModules> 元素定义在 ASP.NET AJAX 中使用的 HTTP 模块。
下例示例展示了用于 ASP.NET AJAX 的 <httpModules> 元素,可以将此节添加到已存在的 Web.config 文件中做为 <system.web> 元素的一个子元素:
4.2.6 <system.web.extensions> 元素下例示例展示了用于 ASP.NET AJAX 的 <httpModules> 元素,可以将此节添加到已存在的 Web.config 文件中做为 <system.web> 元素的一个子元素:
<system.web>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>
</system.web>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>
</system.web>
<system.web.extensions> 元素提供了配置如何调用 Microsoft ASP.NET AJAX 应用程序中的 Web 服务的元素。<jsonSerialization>元素指定定制类型的转换器以覆盖 JSON 串行化的默认设置,<converters> 元素指定定制的类型转换器。<authenticationService> 元素用于使身份认证服务可用或不可用。<profileService>元素用于使个性化信息服务可用或不可用,并指定服务暴露的属性。<scriptResourceHandler> 元素用于使缓存可用或不可用,以及由脚本使用的资源压缩。
<scriptResourceHandler> 元素、<authenticationService> 元素和<profileService> 元素只能定义在 Machine.config 文件或应用程序根目录下的 Web.config 文件中。<jsonSerialization>元素则还可以定义在Web 站点的子文件夹下的 Web.config 中。
下例示例展示了用于 ASP.NET AJAX 的 <system.web.extensions> 元素,可以将此节添加到已存在的 Web.config 文件中做为 <configuration> 元素的一个子元素:
4.2.7 <system.webserver> 元素<scriptResourceHandler> 元素、<authenticationService> 元素和<profileService> 元素只能定义在 Machine.config 文件或应用程序根目录下的 Web.config 文件中。<jsonSerialization>元素则还可以定义在Web 站点的子文件夹下的 Web.config 中。
下例示例展示了用于 ASP.NET AJAX 的 <system.web.extensions> 元素,可以将此节添加到已存在的 Web.config 文件中做为 <configuration> 元素的一个子元素:
<system.web.extensions>
<scripting>
<webServices>
<!-- 定制 maxJsonLength 并添加一个定制的 JSON 转换程序。 -->
<!--
<jsonSerialization maxJsonLength="500">
<converters>
<add name="ConvertMe"
type="Acme.SubAcme.ConvertMeTypeConverter"/>
</converters>
</jsonSerialization>
-->
<!-- 使论证服务可用,如果合适包括 requireSSL="true" 。-->
<!--
<authenticationService enabled="true" requireSSL = "true|false"/>
-->
<!-- 使个性化服务可用。要允许在 ASP.NET AJAX 应用程序中获取或修改个性化属性,
需要将每个属性的名称添加到 readAccessProperties 和 writeAccessProperties 属性中。 -->
<!--
<profileService enabled="true"
readAccessProperties="propertyname1,propertyname2"
writeAccessProperties="propertyname1,propertyname2" />
-->
</webServices>
<!-- 开启对客户端脚本文件的压缩或缓存的支持。 -->
<!--
<scriptResourceHandler enableCompression="true"
enableCaching="true" />
-->
</scripting>
</system.web.extensions>
<scripting>
<webServices>
<!-- 定制 maxJsonLength 并添加一个定制的 JSON 转换程序。 -->
<!--
<jsonSerialization maxJsonLength="500">
<converters>
<add name="ConvertMe"
type="Acme.SubAcme.ConvertMeTypeConverter"/>
</converters>
</jsonSerialization>
-->
<!-- 使论证服务可用,如果合适包括 requireSSL="true" 。-->
<!--
<authenticationService enabled="true" requireSSL = "true|false"/>
-->
<!-- 使个性化服务可用。要允许在 ASP.NET AJAX 应用程序中获取或修改个性化属性,
需要将每个属性的名称添加到 readAccessProperties 和 writeAccessProperties 属性中。 -->
<!--
<profileService enabled="true"
readAccessProperties="propertyname1,propertyname2"
writeAccessProperties="propertyname1,propertyname2" />
-->
</webServices>
<!-- 开启对客户端脚本文件的压缩或缓存的支持。 -->
<!--
<scriptResourceHandler enableCompression="true"
enableCaching="true" />
-->
</scripting>
</system.web.extensions>
<system.webserver> 元素包含用于 Microsoft Internet 信息服务(IIS) 7.0 的配置设置。
下例示例展示了用于 ASP.NET AJAX 的 <system.webserver> 元素,可以将此节添加到已存在的 Web.config 文件中做为 <configuration> 元素的一个子元素:
5 总结下例示例展示了用于 ASP.NET AJAX 的 <system.webserver> 元素,可以将此节添加到已存在的 Web.config 文件中做为 <configuration> 元素的一个子元素:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<add name="ScriptModule"
preCondition="integratedMode"
type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-ISAPI-2.0"/>
<add name="ScriptHandlerFactory" verb="*" path="*.asmx"
preCondition="integratedMode"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add name="ScriptHandlerFactoryAppServices" verb="*"
path="*_AppService.axd" preCondition="integratedMode"
type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/>
<add name="ScriptResource" preCondition="integratedMode"
verb="GET,HEAD" path="ScriptResource.axd"
type="System.Web.Handlers.ScriptResourceHandler,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" />
</handlers>
</system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<add name="ScriptModule"
preCondition="integratedMode"
type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-ISAPI-2.0"/>
<add name="ScriptHandlerFactory" verb="*" path="*.asmx"
preCondition="integratedMode"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add name="ScriptHandlerFactoryAppServices" verb="*"
path="*_AppService.axd" preCondition="integratedMode"
type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/>
<add name="ScriptResource" preCondition="integratedMode"
verb="GET,HEAD" path="ScriptResource.axd"
type="System.Web.Handlers.ScriptResourceHandler,
System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" />
</handlers>
</system.webServer>
总的来说,构建一个 ASP.NET AJAX 的开发环境还是很简单的,好了,让我们开始 AJAX 吧...