MVC C#中AJAX调用控制器无法接收数组数据问题求助
解决ASP.NET Core MVC中AJAX提交数据控制器接收为空的问题
我来帮你排查这个问题,你遇到的控制器editedRows集合始终为空的情况,主要有两个关键问题需要修正:
1. jQuery元素获取文本的方法错误
你在收集表格数据时,使用了innerText和textContent这些原生DOM元素的属性,但$(this).find(...)返回的是jQuery对象,并不支持这些原生属性。你需要改用jQuery提供的.text()方法来获取文本内容,同时建议加上.trim()去除多余空格,避免无效数据干扰。
修改后的JavaScript代码:
function ValidateData() { var editedRows = []; $("#eventsTable tbody tr").each(function () { editedRows.push({ PK_WS_Event: $(this).find("td:eq(1)").text().trim(), Act_Id: $(this).find("td:eq(2)").text().trim(), WeeklyStatus: $(this).find("td:eq(3) option:selected").text() == "--Select--" ? "" : $(this).find("td:eq(3) option:selected").text().trim(), WeeklyStatusSubType: $(this).find("td:eq(4) option:selected").text() == "--Select--" ? "" : $(this).find("td:eq(4) option:selected").text().trim(), AccountName: $(this).find("td:eq(5)").text().trim(), AccountNumber: $(this).find("td:eq(6)").text().trim(), WeeklyStatusDesc: $(this).find("td:eq(7)").text().trim(), }); }); $.ajax({ type: 'post', url: "/WeeklyStatus/IndexSubmit", data: JSON.stringify({ editedRows: editedRows }), contentType: 'application/json', dataType: "html", success: function (response) { // 可添加成功后的处理逻辑 }, error: function (xhr, status, error) { alert('提交失败: ' + error); // 显示错误详情更便于排查 } }); }
2. 控制器参数缺少[FromBody]特性
在ASP.NET Core中,当你通过JSON格式提交请求体数据时,必须在控制器参数上标注[FromBody]特性,告诉框架从请求体中读取JSON数据并绑定到模型对象。如果没有这个特性,框架会默认尝试从查询字符串或表单数据中获取参数,自然无法接收到你通过JSON提交的数组。
修改后的控制器代码:
[HttpPost] public IActionResult IndexSubmit([FromBody] IList<WeeklyStatusEvents> editedRows) { // 现在应该能正常接收到editedRows数据了,可添加你的业务逻辑 return null; }
额外排查建议
- 打开浏览器开发者工具(F12),切换到Network标签,查看AJAX请求的Payload,确认数据是否正确格式化为JSON并发送;
- 确保
WeeklyStatusEvents类的所有属性都是public且带有get/set访问器(你的代码已经满足这一点); - 如果问题仍存在,可以临时将参数改为
[FromBody] dynamic editedRows,查看是否能接收到原始数据,进一步排查模型绑定的细节问题。
内容的提问来源于stack exchange,提问作者Rajesh
相关产品推荐
相关产品推荐

