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

如何向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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:27:37