ASP.NET Core单表单多提交按钮无法传递ID值问题咨询
解决ASP.NET Core单表单多提交按钮传ID问题
问题原因
你当前的submit按钮不在<form>标签内部,根据HTML规范,只有表单内部的表单控件(如input、textarea等)才会被纳入提交的表单数据,外部通过Form属性关联的submit按钮,它的name和value不会自动被提交,这就是POST请求Body为空的核心原因。
可行解决方案
以下方案均满足「保留现有单表单、不创建多表单」的限制:
方案1:jQuery实现(简洁高效)
- 先在你的表单内添加一个隐藏的input字段,用于临时存储要提交的ID:
<form id="FormActive" action="/action_page"> <input type="hidden" name="id" id="hiddenId" /> </form>
- 给所有关联该表单的submit按钮绑定点击事件,设置隐藏字段值后手动提交表单:
$('button[Form="FormActive"]').click(function(e) { e.preventDefault(); // 阻止按钮默认的提交行为 $('#hiddenId').val($(this).val()); // 将当前按钮的value赋值给隐藏字段 $('#FormActive').submit(); // 触发表单提交 });
方案2:原生JavaScript实现(无需依赖jQuery)
如果不想引入jQuery,用原生JS也能实现同样效果:
- 同样先在表单内添加隐藏input(同方案1的第一步)
- 编写原生JS绑定事件:
// 获取所有关联FormActive的submit按钮 const submitButtons = document.querySelectorAll('button[Form="FormActive"]'); submitButtons.forEach(btn => { btn.addEventListener('click', function(e) { e.preventDefault(); // 设置隐藏字段的值为当前按钮的value document.getElementById('hiddenId').value = this.value; // 提交表单 document.getElementById('FormActive').submit(); }); });
效果说明
两种方案的逻辑一致:点击按钮时,先把按钮的ID值存入表单内的隐藏字段,再提交表单。这样ASP.NET Core后端就能通过[FromForm]或直接绑定模型的方式获取到id参数的值。
内容的提问来源于stack exchange,提问作者YaSecu
相关产品推荐
相关产品推荐

