在Visual Studio 2005 Web Application Project中使用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
posted on 2006-12-10 09:18  Dflying Chen  阅读(15746)  评论(47编辑  收藏  举报