jQuery无法向ASP.NET Core MVC的Post Action传递数据的问题
排查方案
1. 修正Form Action路径
不要硬写相对路径,用Razor内置方法生成可靠的路由地址,避免路由解析偏差:
<form id="addEmployeeForm" action="@Url.Action("Add", "Employee")" method="post">
Url.Action会根据项目路由配置自动拼接正确的控制器和动作路径,适配部署环境的子应用路径或自定义路由规则。
2. 校验ViewModel与表单字段的绑定一致性
确保EmployeeViewModel的属性名和表单input的name属性完全匹配(大小写敏感):
- 若ViewModel有
public string EmployeeName { get; set; },表单对应字段必须是<input name="EmployeeName" ...> - 嵌套属性需保持层级命名一致,比如
Department.DepartmentName对应<input name="Department.DepartmentName" ...>
3. 规范AJAX提交逻辑
如果用site.js的AJAX提交,优先直接序列化表单而非手动拼接ViewModel,避免序列化遗漏:
$.ajax({ url: $("#addEmployeeForm").attr("action"), type: "POST", data: $("#addEmployeeForm").serialize(), success: function(res) { // 处理成功回调 }, error: function(xhr) { console.log(xhr.responseText); // 打印错误详情辅助排查 } });
后端Action保持基础配置即可:
[HttpPost] public IActionResult Add(EmployeeViewModel model) { // 业务逻辑 }
如果是手动序列化JSON传递,后端需添加[FromBody]特性,同时JS设置对应请求头:
[HttpPost] public IActionResult Add([FromBody] EmployeeViewModel model)
$.ajax({ url: $("#addEmployeeForm").attr("action"), type: "POST", contentType: "application/json", data: JSON.stringify(sendViewModel), // 其他配置 });
4. 确认路由配置有效性
检查项目启动文件(Startup.cs/Program.cs)中的默认路由规则是否包含控制器和动作:
app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
如果用特性路由,需给Add方法添加对应标记:
[HttpPost("Add")] // 或 [Route("Employee/Add")] public IActionResult Add(EmployeeViewModel model)
5. 利用开发者工具定位问题
打开浏览器F12开发者工具,切换到Network标签:
- 查看请求地址是否正确,404通常是路由匹配失败或控制器/动作不存在
- 检查Payload/Form Data标签,确认表单数据是否完整传递
- 查看后端日志,确认Action是否被命中,以及
ModelState.IsValid是否验证失败
内容的提问来源于stack exchange,提问作者user17195990
相关产品推荐
相关产品推荐

