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

ASP.NET Core 6 MVC中AJAX传值控制器List参数为空的原因

问题根因

AJAX提交JSON数组时控制器参数为空,是两处模型绑定规则不匹配导致的:

  1. 你设置了请求头contentType: "application/json",请求体是纯JSON内容,但ASP.NET Core默认对POST请求会从表单域读取参数,不会自动解析请求体的JSON,必须显式给参数加[FromBody]特性,指定绑定来源为请求体。
  2. 你前端直接序列化数组作为请求体发送,后端接收参数是命名为empList的集合类型,默认模型绑定器会尝试在JSON根节点查找名为empList的属性来匹配参数,直接传数组的话根节点没有这个属性名,自然绑定失败。
修复方案

两种方案二选一即可:

  • 方案1:仅修改后端代码,适配前端直接传数组的逻辑
    给Action参数加上[FromBody]特性,修改后代码如下:

    [HttpPost]
    public IActionResult GetQuiz([FromBody] List<Employee> empList)
    {
        return RedirectToAction("Index","Home");
    }
    

    加了[FromBody]后,模型绑定器会直接把请求体根节点的数组反序列化成List<Employee>类型,不需要额外匹配参数名。

  • 方案2:同时修改前后端,保持参数名匹配
    后端同样需要加[FromBody]特性,前端提交时把数组包装成和参数名一致的对象再序列化,修改后AJAX提交部分代码如下:

    $.ajax({
        url: 'Home/GetQuiz',
        data: JSON.stringify({ empList: results }), // 包装为带empList属性的对象
        type: 'POST',
        contentType: "application/json",
        dataType: 'json',
        success: function (resp) {
            // 处理响应逻辑
        }
    });
    

额外注意:如果修复后还是出现单个属性值为空的情况,检查Employee类的属性名和前端传的JSON字段名是否匹配,ASP.NET Core默认的JSON序列化配置支持大小写不敏感匹配,如果你自定义过序列化规则,需要保证字段名对应。


内容的提问来源于stack exchange,提问作者esperanto_qun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:27:21