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

Ajax提交表格数据至Controller,模型绑定及循环取值失败问题

解决方法

1. 修正前端Ajax请求格式

前端需将表格数据数组转为JSON字符串,与文件一同通过FormData发送,无需手动设置Content-Type,让浏览器自动处理:

// 假设已收集好表格数据到goodsArray数组
const formData = new FormData();
// 添加上传文件
formData.append('fileTobePosted', document.getElementById('fileInput').files[0]);
// 将表格数组转为JSON字符串存入FormData
formData.append('Goods', JSON.stringify(goodsArray));

// 发送请求
$.ajax({
    url: '/YourController/TargetAction',
    method: 'POST',
    data: formData,
    processData: false,
    contentType: false,
    success: res => {
        // 处理成功逻辑
    }
});

2. 后端正确接收并解析数据

方案一:直接反序列化JSON到模型列表

如果tbl_Goods是单条商品数据的模型,直接从Request.Form取出JSON字符串,反序列化为List<tbl_Goods>后循环处理:

[HttpPost]
public IActionResult TargetAction()
{
    // 获取上传文件
    var uploadFile = Request.Form.Files["fileTobePosted"];
    
    // 读取表格JSON数据并反序列化
    var goodsJson = Request.Form["Goods"];
    var goodsList = JsonSerializer.Deserialize<List<tbl_Goods>>(goodsJson);
    
    // 循环处理每条商品数据
    foreach (var goods in goodsList)
    {
        var info = goods.GoodsInformation;
        var desc = goods.Description;
        // 执行你的业务逻辑
    }
    
    return Ok();
}

方案二:适配模型绑定规则(可选)

若想直接通过模型接收,需调整前端发送格式,将每条数据的字段按Goods[index].GoodsInformation、Goods[index].Description的形式存入FormData,但这种方式不如JSON序列化简洁,尤其数据字段较多时。

3. 原问题原因说明

之前循环Request.Form无法获取GoodsInformation和Description,是因为你将整个表格数组打包成了JSON字符串,存入了Goods这个单一键名中,而非将每个字段单独作为FormData的键。因此必须先解析整个JSON字符串,才能获取每条数据的具体字段值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:20:32