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

ASP.NET JavaScript 管理方案:去重註冊與統一輸出

     編輯:關於ASP.NET

自訂控件、UserControl、頁面、後端代碼均可能引用 JS,極易造成重複引用、順序錯誤、版本衝突。本文提供一個輕量級管理方案。

核心控件:Script

public class Script : Control
{
    public string Src { get; set; }

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        if (string.IsNullOrEmpty(Src)) return;

        string resolved = ResolveUrl(Src);
        var list = HttpContext.Current.Items["IncludedJavaScript"] as List<string>;
        if (list == null)
        {
            list = new List<string>();
            HttpContext.Current.Items["IncludedJavaScript"] = list;
        }

        if (!list.Contains(resolved))
            list.Add(resolved);
    }
}

頁面統一輸出

在 MasterPage 或基底頁面 `PreRender` 階段輸出:

protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);
    var list = HttpContext.Current.Items["IncludedJavaScript"] as List<string>;
    if (list != null)
    {
        foreach (string src in list)
            Page.ClientScript.RegisterClientScriptInclude(src, src);
    }
}

使用範例

<!-- UserControl -->
<uc:Script Src="~/Scripts/jquery-1.12.4.min.js" runat="server" />
<uc:Script Src="~/Scripts/my-plugin.js" runat="server" />

<!-- Content Page -->
<uc:Script Src="~/Scripts/page-specific.js" runat="server" />

優勢

  • **去重**:同一請求中相同 JS 僅輸出一次。
  • **解耦**:控件/頁面聲明依賴,不關心輸出位置與順序。
  • **擴展性強**:易擴展加入版本號、CDN 回退、合併壓縮、依賴排序等邏輯。

生產級建議

  1. 改用 `ScriptManager` (ASP.NET AJAX) 或 `BundleConfig` (ASP.NET MVC/Core) 內建打包最小化。
  2. 引入 `aspnet-clientlibs`、`ClientDependency` 等成熟庫支援依賴圖、非同步載入。
  3. HTTP/2 環境下考慮不合併、多路複用優勢。

此方案適合舊版 WebForms 專案快速治理 JS 混亂,零外部依賴、幾十行代碼即可落地。

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