在现有的ASP.NET程序上应用ASP.NET AJAX

本文详细介绍了如何为现有的ASP.NET 2.0 Web应用程序配置ASP.NET AJAX,包括添加必要的程序集引用、配置Web.Config文件以启用客户端脚本压缩、缓存、JSON序列化、用户身份认证等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于现有的基于ASP.NET 2.0的Web应用程序,我们需要手动配置ASP.NET AJAX的相关设定。

1.添加必要程序集的引用

首先在解决方案中添加启用ASP.NET AJAX所必需的Microsoft.Web.Extensions.dll和System.Web.Preview.dll两个程序集的引用,这两个程序集分别随ASP.NET AJAX的“核心”部分和“Futures”部分的安装部署到了本机。注意,若本机和远程服务器均安装了ASP.NET AJAX的核心部分,则System.Web.Extensions.dll程序集就已经添加至了各自的GAC中,在接下来的步骤中就不必再添加该程序集的引用。

在Visual Studio中打开这个现有的ASP.NET 2.0的Web应用程序。若在Solution Explorer中没有/Bin文件夹,则首先在Web Site上单击右键,并在弹出的上下文菜单中选择Add ASP.NET Folder,然后在展开的菜单中选择Bin,即可添加Bin文件夹(见图2-7)。

接着在刚刚添加的/Bin文件夹上再次单击右键,并在弹出菜单中选择Add Reference…。在弹出的对话框中切换至Browse选项卡,并导航到System.Web.Extensions. dll和Microsoft.Web.Preview.dll这两个程序集所在的位置(按照默认路径,这两个文件一般位于C:/Program Files/Microsoft ASP.NET/ASP.NET 2.0 AJAX Extensions/ v.1.0.61025/和C:/Program Files/Microsoft ASP.NET/ ASP. NET 2.0 AJAX Futures January CTP/ v.1.0.61025中)。选择这两个文件,如图2-8所示。然后点击OK按钮以确认添加引用。

更简单的方法是直接将Microsoft.Web.Extensions.dll和Microsoft.Web.Preview.dll拷贝到/Bin文件夹中,然后刷新Solution Explorer。如果一切正确的话,之后将会在Solution Explorer中看到添加好的这两个程序集,如图2-9所示。

图2-8    在Bin文件夹内添加System.Web. Extensions.dll程序集的引用

图2-9    添加了System.Web.Extensions.dll和Microsoft. Web.Preview.dll引用后的Solution Explorer

2.配置Web.Config文件

下面让我们打开并按照如下步骤编辑位于Web Site根目录下的Web.Config文件。

Web.Config是一个XML文件,其中的根元素是<configuration>。在<configuration>根元素中添加一个<configSections>子元素,并在其中定义一些嵌套的<sectionGroup>:

 
<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">

    
<sectionGroup name="webServices"  type="System.Web.Configuration.ScriptingWebServicesSectionGroup,  System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,  PublicKeyToken=31bf3856ad364e35">

          ...

          ...

        
</sectionGroup>

      
</sectionGroup>

    
</sectionGroup>

</configSections>

 

然后在<configuration>根元素中定义<System.web.extensions>子元素,并在其中定义相应的与上面<sectionGroup>相呼应的层次结构,如下所示:

 

<system.web.extensions>

    
<scripting>

      
<webServices>

        ...

        ...

      
</webServices>

    
</scripting>

</system.web.extensions>

 

若你希望ASP.NET AJAX应用程序在运行时能够对客户端脚本文件进行压缩或缓存,则应该在<sectionGroup name="scripting">中定义一个新的<section>:

 

<section name="scriptResourceHandler"  type="System.Web.Configuration.ScriptingScriptResourceHandlerSection,  System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,  PublicKeyToken=31bf3856ad364e35" requirePermission="false"  allowDefinition="MachineToApplication"/>

 

然后在<scripting>中添加这部分启用脚本资源压缩以及缓存的配置声明:

 

<scriptResourceHandler enableCompression="true" enableCaching="true" />

 

这段声明将在程序运行于Release模式时压缩客户端脚本库的大小。如果不是程序中有非常特殊的需要,我们绝对应该添加这个HTTP模块以提高网络传输速度。

若ASP.NET AJAX应用程序中需要自定义的JSON转换方式,则应该在<sectionGroup name="webServices">的最内层中定义相应的<section>,例如:

 

<section name="jsonSerialization"  type="System.Web.Configuration.ScriptingJsonSerializationSection,  System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,  PublicKeyToken=31bf3856ad364e35" requirePermission="false"  allowDefinition="Everywhere"/>

 

并在<webServices>中添加自定义的转换器声明。例如,下列转换器即可将服务器端ADO.NET中的DataSet、DataTable以及DataRow自动转换为客户端的相应对象。当然,客户端的这三种对象也可以自动转换为服务器端的相应形式(关于这部分内容,将在第Ⅱ卷中详细介绍):

 

<jsonSerialization maxJsonLength="500">

    
<converters>

        
<add name="DataSetConverter"  type="Microsoft.Web.Preview.Script.Serialization.Converters.DataSetConverter, Microsoft.Web.Preview, Version=1.0.61025.0, Culture=neutral,  PublicKeyToken=31bf3856ad364e35"/>

        
<add name="DataRowConverter"  type="Microsoft.Web.Preview.Script.Serialization.Converters.DataRowConverter, Microsoft.Web.Preview, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

        
<add name="DataTableConverter"  type="Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter, Microsoft.Web.Preview, Version=1.0.61025.0, Culture=neutral,  PublicKeyToken=31bf3856ad364e35"/>

    
</converters>

</jsonSerialization>

 

若ASP.NET AJAX应用程序中需要在客户端访问ASP.NET所提供的用户身份认证服务,则应该在<sectionGroup name="webServices">中定义这样一个<section>:

 

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

并在
<webServices>中添加这一段的定义,用来允许在客户端访问户身份认证服务(其中requireSSL属性可以根据需要设置):

<authenticationService enabled="true" requireSSL ="true|false"/>

 

若ASP.NET AJAX应用程序中需要在客户端访问ASP.NET所提供的用户个性化信息服务,则应该在<sectionGroup name="webServices">中定义这样一个<section>:

 

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

 

并在<webServices>中添加这一段的定义,用来允许在客户端访问用户个性化信息服务。其中writeAccessProperties指定的用户个性化属性可以在客户端进行设定,read- AccessProperties指定的用户个性化属性可以在客户端进行访问:

 

<profileService enabled="true" 

          readAccessProperties
=" propertyname1;propertyname2" 

          writeAccessProperties
=" propertyname1;propertyname2" />

 

若想暴露出所有的用户个性化属性供客户端设定/读取,则可以在readAccess- Properties或WriteAccessProperties中使用通配符*,代码如下:

 

<profileService enabled="true" readAccessProperties="*" WriteAccessProperties="*" />

 

接下来在<configuration>根元素中的<system.web>节中注册ASP.NET AJAX服务器端控件的前缀:

 

<pages>

    
<controls>

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

      
<add tagPrefix="asp" namespace="Microsoft.Web.Preview.UI"  assembly="Microsoft.Web.Preview"/>

      
<add tagPrefix="asp" namespace="Microsoft.Web.Preview.UI.Controls"  assembly="Microsoft.Web.Preview"/>

    
</controls>

</pages>

 

接下来修改<compilation>节,允许调试和添加必要的用于调试的程序集:

 

<compilation debug="true">

    
<assemblies>

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

    
</assemblies>

    
<buildProviders>

      
<add extension="*.asbx"  type="Microsoft.Web.Preview.Services.BridgeBuildProvider"/>

    
</buildProviders>

</compilation>

 

注意,上面代码中同样包含了<buildProviders>以及其中*.asbx文件的声明。若你的应用程序不需要服务器端远程Web Service桥,那么没有必要添加<buildProviders>中的这部分内容。

还是在<system.web>元素中,若你的ASP.NET AJAX应用程序中需要在客户端调用服务器端的Web Service,则需要对Web Service应用一些新的HTTP Handler,并为其生成必要的客户端JavaScript代理脚本。找到<system.web>元素中的<httpHandlers>子元素,移除现有的Web Service文件(.asmx)的Handler,然后添加ASP.NET AJAX引入的新的Handler(*.asbx一项同样可以根据需要有选择地添加):

 

<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"/>

    
<add verb="GET,HEAD,POST" path="*.asbx"  type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"  validate="false"/>

</httpHandlers>

 

仍然是在<system.web>元素中添加如下的HTTP模块声明:

 

<httpModules>

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

</httpModules>

 

最后,在<configuration>节中添加<system.webServer>小节,为Web服务器进行相应的配置(这些配置是可选的,将只应用于IIS7中):

 

<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-Integrated"/>

      
<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"/>

      
<add name="ASBXHandler" verb="GET,HEAD,POST" path="*.asbx"  preCondition="integratedMode" type="System.Web.Script.Services.  ScriptHandlerFactory,System.Web.Extensions, Version=1.0.61025.0,  Culture=neutral,PublicKeyToken=31bf3856ad364e35"/>

    
</handlers>

</system.webServer>

通过上述设置过程,我们就完成了为现有的ASP.NET 2.0应用程序应用ASP.NET AJAX所需要的所有配置步骤。

可以看到ASP.NET AJAX的配置并不是那么容易,但新建的ASP.NET AJAX Web站点中的Web.config文件即包含了默认的ASP.NET AJAX配置。我们完全可以基于这个文件并按照上面的介绍,根据需要对其进行修改或补充。限于篇幅,这里就不再列出完整的代码。

ajax技术,无刷新技术 导读:ScriptManager控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问Web Service,所有需要支持ASP.NET AJAXASP.NET页面上有且只能有一个ScriptManager控件。在ScriptManager控件中我们可以指定需要的脚本库,或者指定通过JS来调用的Web Service,以及调用AuthenticationService和ProfileService,还有页面错误处理等。 ASP.NET AJAX入门系列(3):使用ScriptManagerProxy控件 导读:在ASP.NET AJAX中,由于一个ASPX页面上只能有一个ScriptManager控件,所以在有母版页的情况下,如果需要在Master-Page和Content-Page中需要引入不同的脚本时,这就需要在Content-page中使用ScriptManagerProxy,而不是ScriptManager,ScriptManager 和 ScriptManagerProxy 是两个非常相似的控件。 ASP.NET AJAX入门系列(4):使用UpdatePanel控件(一) 导读:UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个UpdatePanel控件和一个ScriptManager控件就可以自动实现局部更新。通过本文来学习一下UpdatePanel简单的使用方法(第一篇)。 ASP.NET AJAX入门系列(5):使用UpdatePanel控件(二) 导读:UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个UpdatePanel控件和一个ScriptManager控件就可以自动实现局部更新。通过本文来学习一下UpdatePanel其他的一些使用方法(第二篇)。 ASP.NET AJAX入门系列(6):UpdateProgress控件简单介绍 导读:在ASP.NET AJAX Beta2中,UpdateProgress控件已经从“增值”CTP中移到了ASP.NET AJAX核心中,本文简单介绍一些它的基本用法,翻译自官方文档。 ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程 导读:在本篇文章中,我们将通过编写JavaScript来使用客户端行为扩展UpdateProgress控件,客户端代码将使用ASP.NET AJAX Library中的PageRequestManager,在UpdateProgress控件中,将添加一个Button,来允许用户取消异步更新,并且使用客户端脚本来显示或者隐藏进度信息,翻译自官方文档。 ASP.NET AJAX入门系列(8):自定义异常处理 导读:在UpdatePanel控件异步更新时,如果有错误发生,默认情况下会弹出一个Alert对话框显示出错误信息,这对用户来说是不友好的,本文看一下如何在服务端和客户端脚本中自定义异常处理,翻译自官方文档。 ASP.NET AJAX入门系列(9):在母版页中使用UpdatePanel 导读:本文简单介绍一下在母版页中使用UpdatePanel控件,翻译自官方文档。 ASP.NET AJAX入门系列(10):Timer控件简单使用 导读:本文主要通过一个简单示例,让Web页面在一定的时间间隔内局部刷新,来学习一下ASP.NET AJAX中的服务端Timer控件的简单使用。 ASP.NET AJAX入门系列(11):在多个UpdatePanle中使用Timer控件 导读:本文将使用Timer控件更新两个UpdatePanel控件,Timer控件将放在UpdatePanel控件的外面,并将它配置为UpdatePanel的触发器,翻译自官方文档 作者:TerryLee 出处:http://terrylee.cnblogs.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值