在VS.Net2005中使用ASP.NET AJAX

ASP.NET 2.0发布以来,很多朋友都对Visual Studio 2005中的Web Site模型颇有微词,其动态生成的程序集名称非常不利于和MSBuild等工具配合使用。因此,Visual Studio 2005 Web Application Project应运而生,在Web Application Project中,ASP.NET 2.0拥有了和ASP.NET 1.x类似的编译、代码模型,也就是方便了Web应用程序自动化编译部署的实现。

对于ASP.NET AJAX,安装之后会自动在Visual Studio 2005中添加ASP.NET AJAX的Web Site模板,但对于Web Application Project,却没有相应的模版支持。本文就将介绍为Web Application Project添加对ASP.NET AJAX支持的方法。

 

添加Microsoft.Web.Extensions.dll引用

由于Microsoft.Web.Extensions.dll被部署到了GAC中,所以我们无须手动拷贝该程序集到bin文件夹下。在Web Application Project上右键单击,选择“Add Reference...”。在“.NET”选项卡中选择Microsoft.Web.Extensions即可,如下:

如果在这个对话框中找不到Microsoft.Web.Extensions也不要紧。我们可以手动编辑项目文件:在该Web Application Project上右键单击,选择“Unload Project”。然后在被卸载的Web Application Project上再次右键单击,选择“Edit 项目文件名称”,如图:

在打开的项目文件中的<Project>/<ItemGroup>节中添加对Microsoft.Web.Extensions的引用,如下图高亮部分:

保存后在Web Application Project上右键单击,选择“Reload Project”,搞定!

 

添加Microsoft.Web.Preview.dll引用

如果你要使用更多的ASP.NET AJAX控件,例如AutoCompleteExtender等,那么还要添加对Microsoft.Web.Preview.dll程序集的引用。

将Microsoft.Web.Preview.dll拷贝到Web Application Project的bin文件夹内,然后在Web Application Project上右键单击,选择“Add Reference”。在弹出的对话框中选择Browse选项卡并定位到Microsoft.Web.Preview.dll文件即可:

这样,该Web Application Project的解决方案管理器将如下图所示,注意其中已经添加了两个ASP.NET AJAX程序集的引用:

 

配置web.config

配置web.config显得比较简单:新建一个ASP.NET AJAX Web Site,将它默认的web.config全盘拷贝过来即可。下面列出了启用web.config中比较重要的部分:

<?xml version="1.0"?>
<configuration>
 <system.web>
 <pages>
 <controls>
 <add tagPrefix="asp" namespace="Microsoft.Web.UI" assembly="Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
 <add tagPrefix="asp" namespace="Microsoft.Web.UI.Controls" assembly="Microsoft.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>
 <tagMapping>
 <add tagType="System.Web.UI.WebControls.CompareValidator" mappedTagType="Microsoft.Web.UI.Compatibility.CompareValidator, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
 <add tagType="System.Web.UI.WebControls.CustomValidator" mappedTagType="Microsoft.Web.UI.Compatibility.CustomValidator, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
 <add tagType="System.Web.UI.WebControls.RangeValidator" mappedTagType="Microsoft.Web.UI.Compatibility.RangeValidator, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
 <add tagType="System.Web.UI.WebControls.RegularExpressionValidator" mappedTagType="Microsoft.Web.UI.Compatibility.RegularExpressionValidator, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
 <add tagType="System.Web.UI.WebControls.RequiredFieldValidator" mappedTagType="Microsoft.Web.UI.Compatibility.RequiredFieldValidator, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
 <add tagType="System.Web.UI.WebControls.ValidationSummary" mappedTagType="Microsoft.Web.UI.Compatibility.ValidationSummary, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
 </tagMapping>
 </pages>
 
 <compilation debug="false">
 <assemblies>
 <add assembly="Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
 </assemblies>
 </compilation>
 
 <httpHandlers>
 <remove verb="*" path="*.asmx"/>
 <add verb="*" path="*.asmx" validate="false" type="Microsoft.Web.Script.Services.ScriptHandlerFactory, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
 <add verb="GET" path="ScriptResource.axd" type="Microsoft.Web.Handlers.ScriptResourceHandler" validate="false"/>
 </httpHandlers>
 
 <httpModules>
 <add name="WebResourceCompression" type="Microsoft.Web.Handlers.WebResourceCompressionModule, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
 <add name="ScriptModule" type="Microsoft.Web.UI.ScriptModule, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
 </httpModules>
 </system.web>
</configuration>

 

测试一下

上面一步完成之后,我们就完成了在Web Application Project中启用ASP.NET AJAX的配置。现在让我们简单测试一下——用一个最简单的Ajax应用:点击页面中的按钮,异步方式得到服务器端的时间并显示在页面上。

新建一个ASP.NET页面,然后修改.aspx部分,添加ScriptManager和UpdatePanel,以及Button、Label等:

<asp:ScriptManager ID="sm" runat="server" />
<asp:Button ID="btnGetServerTime" Text="Get Server Time" runat="server" OnClick="btnGetServerTime_Click" />
<asp:UpdatePanel ID="up" runat="server">
 <Triggers>
 <asp:AsyncPostBackTrigger ControlID="btnGetServerTime" EventName="Click" />
 </Triggers>
 <ContentTemplate>
 <asp:Label ID="lbTime" runat="server" />
 </ContentTemplate>
</asp:UpdatePanel>

然后在Codebehind文件中编写Button的事件处理函数:

protected void btnGetServerTime_Click(object sender, EventArgs e)
{
 lbTime.Text = DateTime.Now.ToString();
}

搞定之后,测试一下。如果传统的整页回送已经改成了Ajax方式的异步回送,那么恭喜你,大功告成!

如果朋友们在使用Web Application Project和ASP.NET AJAX时还有什么问题,也可以在此提出。

 

相关资源

  1. Visual Studio 2005 Web Application Project下载:http://msdn2.microsoft.com/en-us/asp.net/aa336618.aspx
  2. Visual Studio 2005 Web Application Project入门教程(英文):http://webproject.scottgu.com/
  3. ASP.NET AJAX主页:http://ajax.asp.net/
  4. ASP.NET AJAX学习资源汇总(中文):http://www.cnblogs.com/dflying/archive/2006/11/19/565503.html
  5. ASP.NET AJAX学习资源汇总(英文):http://www.cnblogs.com/dflying/archive/2006/11/26/572712.html

备注:本文引用自http://www.cnblogs.com/dflying/archive/2006/12/10/587775.html

相关文章
相关标签/搜索
每日一句
    每一个你不满意的现在,都有一个你没有努力的曾经。