在 ASP.NET WebForms 後端程式碼中動態產生或註冊 JavaScript,是整合伺服器邏輯與客戶端互動的常見需求。.NET Framework 提供多種註冊方式,各有執行時機、適用場景與限制。本文詳細比較四種主流方法,並提供最佳實踐建議。
| 方法 | 命名空間/類別 | 執行時機 | 可呼叫外部 JS 函式 | 適用場景 |
|---|---|---|---|---|
| Response.Write | HttpResponse | 立即輸出至回應串流 | 否(需自行寫完整 function 定義) | 極簡單、一次性輸出、不需整合頁面生命週期 |
| ClientScript.RegisterStartupScript | ClientScriptManager | 頁面 Render 階段,表單結束前 | 是 | 傳統 WebForms、非 UpdatePanel 環境、頁面載入後執行 |
| Control.Attributes["onclick"] | WebControl | 控制項 Render 時輸出屬性 | 是 | 綁定特定控制項事件(按鈕點擊、文字變更) |
| ScriptManager.RegisterStartupScript | ScriptManager (AJAX) | 非同步回發結束時,配合 UpdatePanel | 是 | UpdatePanel 內、部分頁面更新、AJAX 環境 |
// 缺點:輸出位置不可控、無法呼叫外部 .js 檔定義的函式、易破壞 HTML 結構
Response.Write("");
// 若需呼叫自訂函式,必須連定義一起寫出
Response.Write("");
// 在 Page_Load 或按鈕事件中
ClientScript.RegisterStartupScript(
this.GetType(), // 型別識別碼
"MyScriptKey", // 唯一鍵值,重複鍵值只會輸出一次
"", // 腳本內容
false // false = 不自動加