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
相关产品推荐
相关产品推荐

