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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:10:25