首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

Visual Studio 2008 開發 .NET 2.0 AJAX 應用程式:安裝擴充、Web.config 設定與 UpdatePanel 實作全紀錄

     編輯:ASP.NET 基礎

背景:VS2008 內建 .NET 3.5,開發 .NET 2.0 AJAX 需額外安裝

Visual Studio 2008 預設針對 .NET Framework 3.5 (含 ASP.NET AJAX 內建)。若專案目標為 .NET 2.0,需手動安裝擴充套件並調整組件版本參考。

安裝步驟 (依序執行)

  1. ASP.NET AJAX Extensions 1.0:提供 .NET 2.0 環境下的 AJAX 伺服端/客戶端程式庫 (System.Web.Extensions.dll)
  2. Microsoft ASP.NET 2.0 AJAX Templates for Visual Studio 2008:提供「AJAX 開啟的網站/專案」範本、專案項目範本

安裝完成後,VS2008 新增專案/新增項目 對話方塊將出現 AJAX 相關範本。

關鍵:Web.config 組件版本重導向與控制項註冊

專案建立後,必須手動修改 Web.config 指定 System.Web.Extensions 版本為 1.0.61025.0 (.NET 2.0 AJAX 版本),而非 3.5 版本 (3.5.0.0)。

1. pages/controls 區段:註冊 AJAX 控制項標籤前綴

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

2. compilation/assemblies 區段:強制載入正確版本組件

<compilation debug="true">
  <assemblies>
    <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Extensions.Design, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </assemblies>
</compilation>

3. httpHandlers / httpModules (IIS 6/傳統模式必要)

<httpHandlers>
  <add verb="*" path="*.asmx" 
       type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  <add verb="*" path="*_AppService.axd" 
       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" />
</httpHandlers>

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

IIS 7+ 整合模式 需對應至 system.webServer/handlers、modules 區段。

快速驗證:建立測試頁面

ASPX 頁面

<%@ Page Language="C#" %>
<form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <div>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <label runat="server" id="lblTime"></label>
                <%= DateTime.Now.ToString() %>
                <asp:Button ID="btnUpdate" runat="server" Text="更新時間" OnClick="btnUpdate_Click" />
                <asp:Timer ID="Timer1" runat="server" Interval="5000" OnTick="Timer1_Tick" />
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="btnUpdate" EventName="Click" />
            </Triggers>
        </asp:UpdatePanel>
        <hr />
        <%= DateTime.Now.ToString() %> <!-- 頁面其餘部分不更新 -->
        <asp:Button ID="btnFullPost" runat="server" Text="完整回發" />
    </div>
</form>

後置程式碼

protected void btnUpdate_Click(object sender, EventArgs e) {
    lblTime.InnerText = "部分更新: " + DateTime.Now.ToString();
}

protected void Timer1_Tick(object sender, EventArgs e) {
    lblTime.InnerText = "計時器觸發: " + DateTime.Now.ToString();
}

核心控制項解析

常見問題與解決

控制項功能關鍵屬性/事件
ScriptManager管理 AJAX 腳本、Web 服務代理、部分渲染EnablePartialRendering, Services, Scripts
UpdatePanel定義部分更新區域UpdateMode (Always/Conditional), ChildrenAsTriggers, Triggers
ContentTemplateUpdatePanel 內容區塊放置需部分更新的控制項
AsyncPostBackTrigger指定觸發非同步回發的控制項/事件ControlID, EventName
PostBackTrigger指定觸發完整回發的控制項 (如檔案上傳)ControlID
Timer定時觸發非同步回發Interval (毫秒), OnTick
問題原因解決
「無法載入型別 System.Web.UI.ScriptManager」組件版本不符 (參考 3.5 版而專案為 2.0)檢查 Web.config 所有 System.Web.Extensions 版本為 1.0.61025.0
UpdatePanel 不更新UpdateMode=Conditional 但無 Trigger、或控制項不在 ContentTemplate 內加入 AsyncPostBackTrigger、確認控制項位置
ScriptResource.axd 404httpHandlers 未註冊、或 IIS 7 整合模式缺 system.webServer/handlers補全 handlers 註冊、或切換應用程式集區為傳統模式
非同步回發後 JavaScript 錯誤UpdatePanel 更新後 DOM 重建,原有事件綁定失效使用 pageLoad() 函數或 ScriptManager.RegisterStartupScript 重新綁定
大量 ViewState 導致回發緩慢UpdatePanel 內控制項過多、ViewState 未優化設定 EnableViewState=false、使用 ControlState、壓縮 ViewState

遷移建議:從 ASP.NET AJAX 1.0 邁向現代架構

  • .NET 3.5+:ASP.NET AJAX 內建,無需額外安裝,組件版本 3.5.0.0 / 4.0.0.0
  • ASP.NET Core:放棄 UpdatePanel,改用 Fetch API / Axios + Web API + 前端框架 (Blazor/React/Vue)
  • jQuery AJAX:輕量替代,`$.ajax()` 呼叫 ASMX/Web API/PageMethod

總結

在 VS2008 開發 .NET 2.0 AJAX 應用,關鍵在於:安裝正確擴充套件 → Web.config 精確鎖定 1.0.61025.0 版本 → 掌握 ScriptManager/UpdatePanel/Timer 核心控制項 → 處理非同步回發後的客戶端腳本重綁定。此為歷史版本維護必備知識,新專案建議直接採用現代前後端分離架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved