ASP.NET Web Forms 開發中,常需在伺服器端或客戶端彈出訊息框、確認框。以下整理三種主流做法,適用情境各異。
適用:刪除、送出前需使用者二次確認。
// 後端碼 Page_Load 或預渲染
btnDelete.Attributes["onclick"] = "return confirm('確定要刪除此筆資料?');";
false → 取消 Postback。true → 正常 Postback 執行伺服器端 btnDelete_Click。適用:資料新增/修改/刪除成功後,顯示完成訊息。
// 簡易寫法(會輸出在頁面最上方,可能導致 HTML 結構異常)
Response.Write("<script>alert('刪除成功!');</script>");
// 建議寫法:使用 ClientScriptManager 註冊啟動腳本
ClientScript.RegisterStartupScript(
this.GetType(),
"alertSuccess",
"alert('刪除成功!');",
true // 自動加上 <script> 標籤
);
RegisterStartupScript 輸出位置在 </form> 前,確保 DOM 就緒。key 需唯一,避免重複註冊。IsStartupScriptRegistered 檢查可防重複。適用:多處需呼叫同一個彈窗邏輯、或需在特定時機觸發。
// 定義函數(輸出在 <form> 後)
ClientScript.RegisterClientScriptBlock(
this.GetType(),
"showConfirm",
"function showConfirm(msg) { return confirm(msg); }",
true
);
// 控制項使用
btnDelete.Attributes["onclick"] = "return showConfirm('確定刪除?');";
若頁面使用 UpdatePanel 非同步回發,RegisterStartupScript 不會在部分更新時執行,需改用 ScriptManager:
ScriptManager.RegisterStartupScript(
this,
this.GetType(),
"alertAsync",
"alert('非同步更新完成!');",
true
);
| 方案 | 優點 | 適用場景 |
|---|---|---|
| SweetAlert2 / Swal | 美觀、可自訂、Promise-based | 專案已引入前端套件 |
| Bootstrap Modal | 非阻塞、可放表單、樣式一致 | 需複雜互動確認 |
| Toastr / Notyf | 非阻塞通知、自動消失 | 成功/失敗提示、不需阻斷流程 |
Attributes["onclick"] = "return confirm(...)"ClientScript.RegisterStartupScriptScriptManager.RegisterStartupScriptClientScript.RegisterClientScriptBlock核心原則:能在客戶端解決的不上伺服器;能用非阻塞通知的不用 alert 阻塞執行緒。