You need to enable JavaScript to run this app. ASP.NET如何接收JS提交的列表数据,通过控制器存入数据库(含Task<IHttpActionResult>示例)
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET如何接收JS提交的列表数据,通过控制器存入数据库(含Task<IHttpActionResult>示例)

问题定位

你当前代码存在3个核心问题导致功能失效:

  • 前后端传参结构不匹配:前端序列化的JSON结构是{"things": [数组]},但后端直接接收List<DataDTO>,模型绑定无法正确解析数据
  • 控制器参数缺少[FromBody]特性:ASP.NET接收application/json格式的POST请求时,需要显式标注从请求体读取数据
  • 逻辑错误:你遍历的是自己初始化的空列表results,完全没有用到前端传过来的参数,循环不会执行任何操作

修正方案

方案1:修改后端适配现有前端代码

首先新增一个接收参数的包装类:

public class UpdateDataRequest
{
    public List<DataDTO> things { get; set; }
}

然后修改控制器代码:

[HttpPost] 
public async Task<IHttpActionResult> UpdateData([FromBody] UpdateDataRequest request)
{
    // 直接遍历前端传过来的things数组
    foreach (var item in request.things)
    {
        var newRecords = new newData();
        newRecords.ID = item.ID;
        newRecords.QUANTITY = item.QUANTITY;
        newRecords.CODE = item.CODE;               
        newRecords.DESCRIPTION = item.DESCRIPTION;
        
        db.newData.Add(newRecords);
    }           

    await db.SaveChangesAsync();
    return Ok("Save successfully");
}

方案2:修改前端适配现有后端参数

如果不想改后端代码,就把前端序列化部分的外层包装去掉:

// 原来的写法是包了一层things,改成直接序列化数组
things = JSON.stringify(things);

然后控制器代码修改为:

[HttpPost] 
public async Task<IHttpActionResult> UpdateData([FromBody] List<DataDTO> data)
{
    foreach (var item in data)
    {
        var newRecords = new newData();
        newRecords.ID = item.ID;
        newRecords.QUANTITY = item.QUANTITY;
        newRecords.CODE = item.CODE;               
        newRecords.DESCRIPTION = item.DESCRIPTION;
        
        db.newData.Add(newRecords);
    }           

    await db.SaveChangesAsync();
    return Ok("Save successfully");
}

额外注意点

  • 建议添加入参校验,判断接收的数组是否为空,避免空引用异常
  • 如果是.NET Core版本的ASP.NET,IHttpActionResult可以替换为IActionResult,用法基本一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 12:45:04