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
相关产品推荐
相关产品推荐

