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

.NET Core Razor Pages:如何将表格行ID传递至模态弹窗

解决Razor Pages中传递行ID到删除函数的问题

嗨,别担心,刚接触Razor Pages遇到这种小问题太正常啦!其实不用纠结隐藏字段,有几个更简洁的方案能轻松搞定这个需求,我给你详细说说~

方案一:利用自定义data属性传递ID(最直观)

这个思路是把每行的ID绑定到触发模态框的按钮上,弹出模态框时把ID暂存起来,点击删除按钮时直接传给你的Ajax函数。

1. 表格行与模态框触发按钮

在Razor的表格循环里,给删除按钮加上data-trip-id属性存储当前行的ID:

<table class="table">
    @foreach (var trip in Model.SeasonTrips)
    {
        <tr data-trip-id="@trip.Id">
            <td>@trip.TripName</td>
            <!-- 其他列内容 -->
            <td>
                <!-- 触发模态框的按钮,绑定ID -->
                <button type="button" class="btn btn-danger" 
                        data-bs-toggle="modal" 
                        data-bs-target="#deleteModal"
                        data-trip-id="@trip.Id">
                    删除
                </button>
            </td>
        </tr>
    }
</table>

2. 模态框与删除按钮

模态框的结构不用改太多,只需要给确认删除按钮加个ID方便监听:

<div class="modal fade" id="deleteModal" tabindex="-1" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">确认删除</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </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="confirmDelete">确认删除</button>
            </div>
        </div>
    </div>
</div>

3. JavaScript逻辑

监听模态框的显示事件,拿到当前要删除的ID,再绑定删除按钮的点击事件调用你的函数:

// 暂存当前要删除的ID
let currentDeleteId = 0;

// 监听模态框即将显示的事件
document.getElementById('deleteModal').addEventListener('show.bs.modal', function(event) {
    // 触发模态框的按钮就是表格里的删除按钮
    const triggerBtn = event.relatedTarget;
    // 从自定义属性里拿到ID
    currentDeleteId = triggerBtn.getAttribute('data-trip-id');
});

// 绑定确认删除按钮的点击事件
document.getElementById('confirmDelete').addEventListener('click', function() {
    // 调用你的删除函数,传入ID
    DeleteSeasonTrip(currentDeleteId);
    // 关闭模态框
    const modal = bootstrap.Modal.getInstance(document.getElementById('deleteModal'));
    modal.hide();
});

// 你的Ajax删除函数
function DeleteSeasonTrip(tripId) {
    $.ajax({
        url: '/YourPageName/DeleteSeasonTrip', // 替换成你的Razor Page处理路径
        type: 'POST',
        // 别忘了带上防伪造令牌,Razor Pages必须的
        headers: {
            RequestVerificationToken: $('input[name="__RequestVerificationToken"]').val()
        },
        data: { id: tripId },
        success: function(result) {
            // 删除成功后可以移除对应行
            $(`tr[data-trip-id="${tripId}"]`).remove();
            alert('删除成功');
        },
        error: function() {
            alert('删除失败,请稍后重试');
        }
    });
}

方案二:直接在模态框显示时传递ID(无需全局变量)

如果不想用全局变量存储ID,也可以把ID直接绑定到确认删除按钮的data属性上:
在模态框的show.bs.modal事件里,给确认按钮赋值:

document.getElementById('deleteModal').addEventListener('show.bs.modal', function(event) {
    const triggerBtn = event.relatedTarget;
    const tripId = triggerBtn.getAttribute('data-trip-id');
    // 把ID绑定到确认按钮上
    document.getElementById('confirmDelete').setAttribute('data-id', tripId);
});

然后删除按钮的点击事件改成:

document.getElementById('confirmDelete').addEventListener('click', function() {
    const tripId = this.getAttribute('data-id');
    DeleteSeasonTrip(tripId);
    const modal = bootstrap.Modal.getInstance(document.getElementById('deleteModal'));
    modal.hide();
});

关于你提到的隐藏字段方案

其实隐藏字段的思路也完全可行,比如在模态框里加一个<input type="hidden" id="tripIdHidden" />,然后在模态框显示时给它赋值document.getElementById('tripIdHidden').value = tripId,删除时再获取这个值。这个方案也没问题,只是用自定义data属性会更简洁一些。

最后提醒一下,Razor Pages的POST请求必须带上防伪造令牌,不然会被拦截,我上面的代码已经加了这个处理,记得在页面里加上@Html.AntiForgeryToken()哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:42:38