在 ASP.NET Web Forms 開發中,資料刪除等高風險操作前加上確認對話框是基本的使用者體驗保障。本文示範如何結合 JavaScript confirm() 與 OnClientClick 屬性,在回傳伺服器前攔截使用者意圖,若取消則阻止 Postback,確認才執行後端刪除邏輯。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DeleteConfirm.aspx.cs" Inherits="WebApp.DeleteConfirm" %>
<!DOCTYPE html>
<html xmlns="https://www.w3.org/1999/xhtml">
<head runat="server">
<title>刪除確認示範</title>
<script type="text/javascript">
function confirmDelete() {
// 回傳 true 繼續 Postback,false 取消
return confirm('您確定要刪除這筆資料嗎?此操作無法復原。');
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="btnDelete" runat="server"
Text="刪除資料"
OnClientClick="return confirmDelete();"
OnClick="btnDelete_Click" />
</div>
</form>
</body>
</html>
using System;
using System.Web.UI;
namespace WebApp
{
public partial class DeleteConfirm : Page
{
protected void btnDelete_Click(object sender, EventArgs e)
{
// 這裡撰寫實際刪除資料庫資料的邏輯
// 例如:using (var ctx = new MyDbContext()) { ctx.Items.Remove(item); ctx.SaveChanges(); }
btnDelete.Text = "已刪除"; // 示範用:按鈕文字變更表示成功
// 實務上建議搭配 GridView/DataList 等資料繫結控制項,重新 BindData()
}
}
}
return 關鍵字至關重要,JavaScript 函式回傳 false 時會取消後續的伺服器端 Postback。true,點「取消」回傳 false。<head> 或頁面底部即可,輕量且相容性極佳。OnClientClick="return showCustomConfirm();"。__doPostBack 或 AJAX 傳遞至後端,避免逐筆確認造成使用者疲勞。| 現象 | 原因 | 修正 |
|---|---|---|
| 點取消仍執行刪除 | OnClientClick 缺少 return | 改為 OnClientClick="return confirmDelete();" |
| 按鈕無反應 | JavaScript 語法錯誤導致函式未定義 | 開啟瀏覽器開發人員工具 Console 檢查紅字錯誤 |
| UpdatePanel 內失效 | 非同步回傳需重新註冊腳本 | 使用 ScriptManager.RegisterStartupScript 重綁 |