ASP.NET Core 6 MVC中AJAX传值控制器List参数为空的原因
问题根因
AJAX提交JSON数组时控制器参数为空,是两处模型绑定规则不匹配导致的:
- 你设置了请求头
contentType: "application/json",请求体是纯JSON内容,但ASP.NET Core默认对POST请求会从表单域读取参数,不会自动解析请求体的JSON,必须显式给参数加[FromBody]特性,指定绑定来源为请求体。 - 你前端直接序列化数组作为请求体发送,后端接收参数是命名为
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
相关产品推荐
相关产品推荐

