將 JavaScript 程式碼封裝為 DLL 內嵌資源,可避免前端檔案散落、便於版本控管與部署。本文示範建立類別庫專案、內嵌 JS 檔、註冊 WebResource、建立伺服器控制項自動註冊腳本的完整流程。
JSControlJScript1.js,設定 Build Action = Embedded ResourceAssemblyInfo.cs 註冊 WebResourceWebControl 的類別,於 OnPreRender 註冊腳本function showAlert() {
alert('Today is a good day');
}
[assembly: System.Web.UI.WebResource("JSControl.JScript1.js", "application/x-javascript")]
資源名稱格式:預設命名空間.檔案名稱
namespace JSControl {
public class Class1 : System.Web.UI.WebControls.WebControl {
protected override void OnPreRender(EventArgs e) {
base.OnPreRender(e);
if (Page != null) {
Page.ClientScript.RegisterClientScriptResource(typeof(Class1), "JSControl.JScript1.js");
}
}
}
}
<%@ Register Assembly="JSControl" Namespace="JSControl" TagPrefix="zhi" %>
<html><head runat="server">
<zhi:Class1 ID="rs1" runat="server" />
</head><body>
<script type="text/javascript">
$(function() { showAlert(); });
</script>
</body></html>
| 優點 | 缺點 |
|---|---|
| JS 程式碼編譯進 DLL,部署單一檔案 | 修改 JS 需重新編譯 DLL,開發迴較長 |
| 自動處理腳本註冊,避免重複引用 | 無法利用瀏覽器快取個別 JS 檔 (除非搭配 CDN) |
| 可搭配壓縮、混淆在建置時期處理 | 偵錯困難,需對應 .map 或來源映射 |
ScriptBundle 自動合併、壓縮、快取aspnet-webpack 整合此技術適用於舊版 Web Forms 專案或需強制封裝邏輯的場景,新專案建議採用現代前端建置流程。