You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC如何在弹窗表单中传入ID实现单条记录删除

解决删除功能中弹窗传递目标ID的问题

问题分析

当前实现的核心问题是:所有删除按钮绑定同一个弹窗,但弹窗表单未携带目标记录ID,无法精准删除指定条目;若为每条记录生成独立弹窗,会重复创建大量DOM元素,引发请求冗余和误删问题。

解决方案

采用复用单个弹窗+动态传递ID的思路:点击删除按钮时,将目标记录ID存入弹窗表单的隐藏字段,提交时传递给后端。具体步骤如下:

1. 改造前端删除按钮

给删除按钮添加自定义属性data-id存储当前记录ID,统一触发同一个弹窗:

<button type="button" class="btn btn-primary delete-btn" data-toggle="modal" data-target="#exampleModal" data-id="@item.Id">
    Delete
</button>

2. 为弹窗表单添加隐藏ID字段

在弹窗的表单内新增隐藏输入框,用于临时存储要删除的记录ID:

@using (Html.BeginForm("Delete", "Banner", FormMethod.Post, new { @class = "form-horizontal" }))
{
    <input type="hidden" name="id" id="delete-id" value="" />
    <p>Are you sure you want to delete this record? </p>
    <div>
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
        <button type="submit" class="btn btn-primary">Yes</button>
    </div>
}

注:移除了不必要的enctype="multipart/form-data",删除操作无需上传文件。

3. 添加JS监听事件传递ID

通过JavaScript监听删除按钮的点击事件,将按钮上的data-id值赋值给表单的隐藏字段:

$(function() {
    $('.delete-btn').on('click', function() {
        var deleteId = $(this).data('id');
        $('#delete-id').val(deleteId);
    });
});

4. 优化后端接口(推荐)

给Delete方法添加[HttpPost]特性明确接收POST请求,同时优化错误处理和跳转逻辑:

[HttpPost]
public async Task<IActionResult> Delete(int id)
{
    try
    {
        await _mediator.Send(new DeleteBannertByIdCommand(id));
    }
    catch (Exception ex)
    {
        TempData["error"] = "删除失败:" + ex.Message;
    }
    return RedirectToAction("Index");
}

修改后的完整前端代码

<br />
<a asp-controller="Banner" asp-action="Create" style="float:right" class="btn btn-success">Create</a>
<br />
<table class="table table-bordered">
    <thead>
        <tr>
            <th>Redirect Url</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.Banners)
        {
            <tr>
                <td>@item.RedirectUrl</td>
                <td>
                    <a asp-controller="Banner" asp-action="Update" asp-route-id="@item.Id" class="btn btn-info">Update</a>
                    <button type="button" class="btn btn-primary delete-btn" data-toggle="modal" data-target="#exampleModal" data-id="@item.Id">
                        Delete
                    </button>
                </td>    
            </tr>
        }
    </tbody>
</table>

<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="exampleModalLabel">Delete</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                @using (Html.BeginForm("Delete", "Banner", FormMethod.Post, new { @class = "form-horizontal" }))
                {
                    <input type="hidden" name="id" id="delete-id" value="" />
                    <p>Are you sure you want to delete this record? </p>
                    <div>
                        <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
                        <button type="submit" class="btn btn-primary">Yes</button>
                    </div>
                }
            </div>
        </div>
    </div>
</div>

<script>
    $(function() {
        $('.delete-btn').on('click', function() {
            var deleteId = $(this).data('id');
            $('#delete-id').val(deleteId);
        });
    });
</script>

内容的提问来源于stack exchange,提问作者user17847724

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:45:38