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

ASP.NET Core中如何获取动态按钮ID并传递至后端

解决动态生成按钮ID传递至后端的问题

首先修正你代码里的一个小问题:当前按钮的id=i不会输出变量i的值,所有按钮的id都会是字符串"i",需要改成id="@i"才能正确渲染每个按钮的唯一ID。

下面是几种可行的实现方式:

方法一:表单+隐藏字段提交

给每个按钮单独包裹一个表单,通过隐藏字段传递按钮ID:

@foreach (var item in Model.showManager.GetMovies())
{
    i++;
    @if (Model.user.IsAdmin == true)
    {
        <form method="post" action="/YourController/Delete">
            <!-- 隐藏字段存储按钮ID -->
            <input type="hidden" name="buttonId" value="@i" />
            <input class="btn_confirm" type="submit" id="@i" value="Delete" />
        </form>
    }
}

后端控制器接收参数:

[HttpPost]
public IActionResult Delete(int buttonId)
{
    // 根据buttonId执行删除逻辑
    return RedirectToAction("Index");
}

方法二:ASP.NET Core标签助手(推荐)

如果是ASP.NET Core项目,可以直接用asp-route参数传递ID,无需额外隐藏字段:

@foreach (var item in Model.showManager.GetMovies())
{
    i++;
    @if (Model.user.IsAdmin == true)
    {
        <form method="post">
            <input class="btn_confirm" type="submit" id="@i" asp-route-buttonId="@i" value="Delete" />
        </form>
    }
}

后端控制器写法和方法一一致,框架会自动解析路由中的buttonId参数。

方法三:AJAX异步提交(无刷新)

如果需要无刷新交互,用JS监听点击事件,通过AJAX传递ID:

@foreach (var item in Model.showManager.GetMovies())
{
    i++;
    @if (Model.user.IsAdmin == true)
    {
        <!-- 用data-id属性存储ID,按钮类型改为button -->
        <input class="btn_confirm" type="button" id="@i" data-id="@i" value="Delete" />
    }
}

<script>
// 批量绑定点击事件
document.querySelectorAll('.btn_confirm').forEach(btn => {
    btn.addEventListener('click', function() {
        const buttonId = this.dataset.id;
        // 提交请求,注意带上防伪造令牌
        fetch('/YourController/Delete', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'RequestVerificationToken': document.querySelector('input[name="__RequestVerificationToken"]').value
            },
            body: JSON.stringify({ buttonId: buttonId })
        }).then(res => {
            // 处理成功后的逻辑,比如移除当前按钮所在的行
            this.closest('tr')?.remove();
        });
    });
});
</script>

后端需要接收JSON格式的参数:

[HttpPost]
public IActionResult Delete([FromBody] int buttonId)
{
    // 执行删除逻辑
    return Ok();
}

另外,建议你直接使用电影的唯一ID(比如item.MovieId)代替自增变量i,这样逻辑更严谨,避免因数据顺序变化导致ID对应错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:35:48