Razor视图foreach循环中Form配合SweetAlert提交删除ID异常怎么解决
问题原因
- ID重复冲突:你在
@foreach循环中给每个删除表单都设置了固定的id="pop",但HTML规范要求页面内ID必须唯一,浏览器只会识别第一个出现的对应ID的表单。你点击其他行的删除按钮时,实际提交的是第一行的表单ID,自然会出现ID位数不对、值错误的问题,这也符合你「非Form提交时ID传递正常」的表现——跳转用的a标签没有依赖ID选择器,每个a的路由参数都是单独生成的。 - 表单选择器拼写错误:JS代码中选择表单用的是
$('#ppp'),但HTML里表单ID是pop,拼写不匹配,就算没有循环问题也找不到正确的表单。
解决方案
直接修改JS逻辑,点击删除按钮时通过相对路径获取当前按钮所属的表单,不需要依赖ID选择器即可精准匹配每行对应的删除表单:
修改后的JS代码
$(".ajax_delete1").on("click", function validateForm(event) { event.preventDefault(); // 直接找当前点击按钮最近的父级form,无需依赖ID var form = $(this).closest('form'); swal({ title: "آیا از پاک کردن این ایتم مطمئن هستید", text: "این ایتم اگر حذف شود دیگر قابل بازگردانی نیست!", icon: "warning", showCancelButton: true, dangerMode: true, confirmButtonColor: '#DD6B55', confirmButtonText: "حذف", cancelButtonText: "انصراف", }) .then((willDelete) => { if (willDelete) { form.submit(); } else { swal("فایل شما پاک نشد!"); } }); });
可选优化
可以删除循环里form的固定id属性,避免后续其他逻辑因为ID重复出现异常:
<form asp-controller="Home" asp-action="RemoveProject" asp-route-id="@item.projectID" method="post"> <a class="fa fa-trash-o ajax_delete1" style="font-size: 28px; color: red; cursor: pointer;"></a> </form>
内容的提问来源于stack exchange,提问作者stoo frisat
相关产品推荐
相关产品推荐

