jQuery Ajax POST请求提交Kendo Grid批量更新数据未传入Controller问题排查
问题根因
你的AJAX请求存在两处配置错误,导致后端无法正确解析请求体:
- 未指定JSON请求的Content-Type:jQuery AJAX默认的
Content-Type是application/x-www-form-urlencoded,但你需要提交JSON格式数据,必须显式声明告诉后端用JSON解析器处理请求体。 - 提交的数据结构不匹配后端参数定义:后端
[FromBody]直接接收List<MyModel>数组,不需要外层包裹items键;你现有代码把序列化后的数组包在items属性里,同时没有序列化整个请求体,最终提交的是表单格式的键值对,和后端预期的纯JSON数组结构不匹配。
修复后的AJAX代码
$.ajax({ type: "POST", async: false, url: baseAPIURL + "MrrRequest/UpdateRequest", timeout: 15000, dataType: 'json', cache: false, // 新增:声明请求体为JSON格式 contentType: 'application/json; charset=utf-8', // 修改:直接序列化数组作为请求体,不需要外层包裹items data: JSON.stringify(options.data.models), success: function (result) { options.success(result); return true; }, complete: function (data) { $("#myGrid").data("kendoGrid").dataSource.read(); }, error: function (jqXHR, textStatus, errorThrown) { alert(textStatus); options.error(); } });
原理说明
你用Fiddler直接调用能成功,就是因为Fiddler里你提交的是纯JSON数组、且Content-Type设置正确,和后端参数的预期完全匹配。修改AJAX配置后,请求结构和Fiddler提交的结构一致,后端即可正常解析出List<MyModel>集合。
内容的提问来源于stack exchange,提问作者HereToLearn_
相关产品推荐
相关产品推荐

