如何向MVC控制器发送JSON数组?前端传递JSON数组至MVC控制器无法接收的求助
解决MVC控制器无法接收JSON数组的问题
我来帮你排查下这个问题,看起来核心问题出在ASP.NET Core的模型绑定规则和请求数据的匹配上,咱们一步步来解决:
1. 核心问题:缺少[FromBody]特性
在ASP.NET Core中,当你通过POST请求发送JSON格式的请求体时,必须在控制器的参数上标记[FromBody]特性。否则框架会默认尝试从URL查询字符串或表单数据中绑定参数,而不会读取请求体里的JSON内容。
修改后的控制器代码:
[HttpPost] public IActionResult GetData([FromBody] List<RootFormFieldsArray> pData) { return Json(new { x = "1"}); }
2. 验证JSON数据结构是否匹配
你的JS代码构造的JSON数组结构是完全匹配List<RootFormFieldsArray>的,每个元素都包含pData对象,里面有Id和Value字段。可以通过浏览器F12的网络面板查看请求的Payload,确认发送的JSON格式是否正确,比如:
[{"pData":{"Id":"input1","Value":"test1"}},{"pData":{"Id":"input2","Value":"test2"}}]
3. 可选优化:简化数据结构
如果觉得当前的嵌套结构有点冗余,可以简化实体类和JS代码,减少一层嵌套:
简化后的实体类:
public class FormFieldsArrayDto { public string Id { get; set; } public string Value { get; set; } }
简化后的JS代码:
function fn_SaveData() { debugger; var jsonArray = []; $.each($("form input:not([type='button'])"), function () { debugger; var _id = $(this).attr("id"); // 直接推送Id和Value,不需要嵌套pData jsonArray.push({ Id: _id, Value: $(this).val() }); }); var pData = JSON.stringify(jsonArray); $.ajax({ url: "/BPMS/FormHome/GetData", type: "POST", data: pData, contentType: "application/json", success: function (data) { } }); }
简化后的控制器代码:
[HttpPost] public IActionResult GetData([FromBody] List<FormFieldsArrayDto> pData) { return Json(new { x = "1"}); }
额外排查点
- 确认请求URL是否正确:通过网络面板查看请求的状态码,如果是404,说明路由路径
/BPMS/FormHome/GetData和控制器的实际路由不匹配。 - 检查项目类型:如果是传统ASP.NET MVC(非Core),确保项目已经引用了Json.NET,
[FromBody]特性同样适用。
内容的提问来源于stack exchange,提问作者M.baty
相关产品推荐
相关产品推荐

