using System.Web.UI.HtmlControls;
HtmlGenericControl cssLink = new HtmlGenericControl("link");
cssLink.Attributes["rel"] = "stylesheet";
cssLink.Attributes["type"] = "text/css";
cssLink.Attributes["href"] = ResolveUrl(Page.ResolveClientUrl("~/Content/themes/blue.css"));
// 插入到 Head 首位,優先級最高
Page.Header.Controls.AddAt(0, cssLink);
HtmlGenericControl jsScript = new HtmlGenericControl("script");
jsScript.Attributes["type"] = "text/javascript";
jsScript.Attributes["src"] = ResolveUrl(Page.ResolveClientUrl("~/Scripts/custom.js"));
// 插入到 CSS 之後,確保樣式優先加載
Page.Header.Controls.AddAt(1, jsScript);
// 在 Page_Load 或 PreRender 中 Literal cssLiteral = new Literal(); cssLiteral.Text = ""; Page.Header.Controls.Add(cssLiteral); Literal jsLiteral = new Literal(); jsLiteral.Text = ""; Page.Header.Controls.Add(jsLiteral);
| 技術點 | 說明 |
|---|---|
| ResolveClientUrl | 將相對路徑轉換為客戶端可訪問的相對路徑,處理虛擬目錄情況 |
| ResolveUrl | 將應用程序相對路徑 (~) 轉換為完整相對路徑 |
| Page.Header | 需要頁面含 <head runat="server"> 才能訪問 |
| Controls.AddAt(index) | 精確控制插入位置,解決依賴順序問題 |
public static class ResourceHelper
{
public static void RegisterCss(Page page, string virtualPath, int priority = 0)
{
if (page.Header == null) return;
HtmlGenericControl link = new HtmlGenericControl("link");
link.Attributes["rel"] = "stylesheet";
link.Attributes["type"] = "text/css";
link.Attributes["href"] = page.ResolveClientUrl(virtualPath);
page.Header.Controls.AddAt(priority, link);
}
public static void RegisterJs(Page page, string virtualPath, int priority = int.MaxValue)
{
if (page.Header == null) return;
HtmlGenericControl script = new HtmlGenericControl("script");
script.Attributes["type"] = "text/javascript";
script.Attributes["src"] = page.ResolveClientUrl(virtualPath);
// 默認添加到末尾
if (priority == int.MaxValue)
page.Header.Controls.Add(script);
else
page.Header.Controls.AddAt(priority, script);
}
}
// 使用示例
ResourceHelper.RegisterCss(this, "~/Content/bootstrap.min.css", 0);
ResourceHelper.RegisterJs(this, "~/Scripts/jquery.min.js", 1);
ResourceHelper.RegisterJs(this, "~/Scripts/app.js");
System.Web.Optimization 統一打包壓縮<link asp-href="...">、<script asp-src="..."> 內置緩存破壞、環境區分掌握動態資源註冊技術,配合現代前端工程化工具,構建高性能、可維護的 Web 應用。