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 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 的配置在很多時候是在用于以前開發的沒有使用 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 站點中,可以從安裝目錄擷取它的一個副本,将它複制到站點的根目錄下即可。預設情況下,該檔案被放在下列位置:
驅動器:"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中去。
新的元素是下列配置節的組成部分:
- <configSections> 元素
- <controls> 元素
- <assemblies> 元素
- <httpHandlers> 元素
- <httpModules> 元素
- <system.web.extensions> 元素
- <system.webserver> 元素
4.2.1 <configSections> 元素
<configSections> 元素建立了用于 SystemWebExtensionsSectionGroup 類的配置節和子配置節,可以為<system.web.extensions>元素中的這些節設定屬性。
下列示例展示了用于 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>
4.2.2 <controls> 元素
<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>
4.2.3 <assemblies> 元素
<assemblies> 元素注冊 System.Web.Extensions 程式集。
下例示例展示了用于 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" 。
4.2.4 <httpHandlers>元素
<httpHandlers> 元素添加用于腳本請求的新的處理程式。
下例示例展示了用于 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>
4.2.5 <httpModules> 元素
<httpModules> 元素定義在 ASP.NET AJAX 中使用的 HTTP 子產品。
下例示例展示了用于 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>
4.2.6 <system.web.extensions> 元素
<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> 元素的一個子元素:
<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>
4.2.7 <system.webserver> 元素
<system.webserver> 元素包含用于 Microsoft Internet 資訊服務(IIS) 7.0 的配置設定。
下例示例展示了用于 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>
5 總結
總的來說,建構一個 ASP.NET AJAX 的開發環境還是很簡單的,好了,讓我們開始 AJAX 吧...