首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET GridView 刪除確認對話框實作:防止誤刪的最佳實踐

     編輯:ASP.NET 基礎

需求背景

GridView 內建 CommandField 可快速新增刪除功能,但缺乏確認機制,易造成使用者誤點刪除導致資料遺失。本文示範使用 TemplateField 搭配 JavaScript confirm() 實作刪除前確認。

實作步驟

步驟 1:定義 TemplateField 刪除欄位

<asp:TemplateField HeaderText="刪除" ShowHeader="False">
    <ItemStyle ForeColor="Red" />
    <ItemTemplate>
        <asp:LinkButton ID="BtnDelete" runat="server" 
            CausesValidation="False" 
            CommandName="Delete" 
            Text="刪除">
        </asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>

步驟 2:加入客戶端確認腳本

<asp:TemplateField HeaderText="刪除" ShowHeader="False">
    <ItemStyle ForeColor="Red" />
    <ItemTemplate>
        <asp:LinkButton ID="BtnDelete" runat="server" 
            CausesValidation="False" 
            CommandName="Delete" 
            Text="刪除" 
            OnClientClick="return confirm('確認要刪除此筆資料嗎?')">
        </asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>

核心屬性解析

屬性值作用
CommandName"Delete"觸發 GridView RowDeleting / RowDeleted 事件
CausesValidation"False"略過頁面驗證控制項,避免驗證失敗阻擋刪除
OnClientClickreturn confirm(...)點擊時先執行 JS 確認,取消返回 false 阻止 PostBack

完整 GridView 範例

<asp:GridView ID="gvData" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="Id" 
    OnRowDeleting="gvData_RowDeleting">
    <Columns>
        <asp:BoundField DataField="Id" HeaderText="編號" />
        <asp:BoundField DataField="Name" HeaderText="名稱" />
        <asp:TemplateField HeaderText="操作">
            <ItemTemplate>
                <asp:LinkButton ID="BtnDelete" runat="server" 
                    CausesValidation="False" 
                    CommandName="Delete" 
                    Text="刪除" 
                    OnClientClick="return confirm('確定要刪除 【<%# Eval("Name") %>】 嗎?')">
                </asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

後端刪除事件處理

protected void gvData_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{
    // 取得主鍵值
    int id = Convert.ToInt32(gvData.DataKeys[e.RowIndex].Value);
    
    // 執行刪除邏輯
    using (var conn = new SqlConnection(connStr))
    using (var cmd = new SqlCommand("DELETE FROM Table WHERE Id=@Id", conn))
    {
        cmd.Parameters.AddWithValue("@Id", id);
        conn.Open();
        cmd.ExecuteNonQuery();
    }
    
    // 重新繫結資料
    BindGridView();
}

進階優化:自訂確認訊息

動態顯示資料名稱增強使用者辨識度:

OnClientClick='return confirm("確定刪除 【<%# Eval("Name").ToString().Replace("\"", "\\\"") %>】 嗎?")'

替代方案對比

Bootstrap Modal 實作範例

<!-- Modal 結構 -->
<div class="modal fade" id="deleteConfirmModal" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">確認刪除</h5>
            </div>
            <div class="modal-body">
                確定要刪除  嗎?
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button>
                <button type="button" class="btn btn-danger" id="confirmDeleteBtn">刪除</button>
            </div>
        </div>
    </div>
</div>

<script>
    var currentDeleteBtn = null;
    
    $('.btn-delete').click(function(e) {
        e.preventDefault();
        currentDeleteBtn = $(this);
        $('#deleteItemName').text($(this).data('item-name'));
        $('#deleteConfirmModal').modal('show');
    });
    
    $('#confirmDeleteBtn').click(function() {
        if (currentDeleteBtn) {
            __doPostBack(currentDeleteBtn.attr('id'), '');
        }
        $('#deleteConfirmModal').modal('hide');
    });
</script>

選擇 OnClientClick + confirm() 仍是最輕量、相容性最佳的基礎方案,適合大多數內部管理系統快速落地。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方案優點缺點適用場景
OnClientClick + confirm()零相依、簡單、相容性佳UI 樣式固定、無法自訂外觀快速開發、內部系統
jQuery UI Dialog美觀、可自訂、支援複雜互動需引入 jQuery UI、額外 JS對外系統、重視 UX
Bootstrap Modal現代化、響應式、整合度高需 Bootstrap 環境Bootstrap 專案
SweetAlert2極致美觀、動畫豐富、Promise API額外套件現代 Web 應用