ASP.NET MVC中通过AJAX传递对象列表时控制器接收值为null如何解决
问题解决方法
核心错误1:前端提交对象类型错误
你的JS代码中循环内声明const saveDetail = [];创建的是数组对象,给数组附加的自定义属性不会被JSON.stringify序列化,最终提交的请求体是空数组组成的列表,后端无法匹配实体类结构,因此得到null。
修改方案:将数组声明改为普通对象声明即可:
// 把 const saveDetail = []; 替换成下面的代码 const saveDetail = {};
核心错误2:控制器参数缺少[FromBody]特性
ASP.NET Web API/.NET 框架中,POST请求传递JSON格式的复杂类型参数时,默认会从QueryString、表单字段中读取参数,不会主动解析请求体的JSON内容,因此需要显式加[FromBody]特性指定参数来源。
修改方案:调整控制器方法参数如下:
[HttpPost] [Authorize] [Route("api/Master/Workflow/InsertRefFieldClone")] // 给参数加[FromBody] public bool InsertRefFieldClone([FromBody] List<BusinessEntities.Master.CurrentProcessNameAndBucketName> item) { // 原有逻辑不变 }
其他可选排查点
- 确认所有int类型的字段没有传递空字符串、null等无法转换为整数的数值,类型不匹配会触发全局反序列化失败,参数直接被赋值为null
- 可以在浏览器控制台打印
console.log(JSON.stringify(data)),检查输出的JSON结构是否和实体类列表结构一致,字段名拼写完全匹配 - 临时去掉
[Authorize]特性测试,排除鉴权中间件拦截导致参数未正常解析的可能性
内容的提问来源于stack exchange,提问作者Ibrahim shaikh
相关产品推荐
相关产品推荐

