You need to enable JavaScript to run this app. ASP.NET 5.0中通过jQuery AJAX传对象数组到控制器结果为null如何解决
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET 5.0中通过jQuery AJAX传对象数组到控制器结果为null如何解决

根因分析

  • 缺失[FromBody]绑定特性:ASP.NET 5.0处理POST请求的JSON格式数据时,默认不会主动从请求体中解析绑定复杂类型参数,需要显式为参数添加[FromBody]注解。
  • 前后端数据结构不匹配:前端提交的JSON是外层包裹regions属性的对象,后端直接接收List<BoundingBoxModel>类型的参数,结构不一致导致解析失败。

修复方案

方案1:前后端对齐直接传递数组(更简洁,推荐)

  1. 调整前端AJAX请求参数,直接序列化数组,无需外层包裹对象:
$.ajax({
    // 其余配置保持不变
    data: JSON.stringify(regions), // 替换原有的JSON.stringify({'regions': regions})
})
  1. 给后端接口参数添加[FromBody]特性:
[HttpPost]
public IActionResult AddRegions([FromBody] List<BoundingBoxModel> regions)
{
    JsonResult result = new JsonResult(this.Json(JsonConvert.SerializeObject(regions), System.Web.Mvc.JsonRequestBehavior.AllowGet)); 
    return result;
}

方案2:后端适配现有前端传参结构

如果不需要修改前端代码,可以新增一个参数包装类匹配前端的JSON结构:

// 新增包装类
public class RegionsPostModel
{
    public List<BoundingBoxModel> Regions { get; set; }
}

修改接口参数为包装类,同时添加[FromBody]特性:

[HttpPost]
public IActionResult AddRegions([FromBody] RegionsPostModel postData)
{
    var regions = postData.Regions;
    JsonResult result = new JsonResult(this.Json(JsonConvert.SerializeObject(regions), System.Web.Mvc.JsonRequestBehavior.AllowGet)); 
    return result;
}

附加校验

修改后如果仍有问题,可在浏览器控制台查看请求的Payload内容,确认数组内的Top/Left/Height/Width字段都是数值类型,没有出现字符串格式的数值导致类型转换失败。

内容的提问来源于stack exchange,提问作者Cress1004

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 16:24:09