MVC前端JS二维数组经AJAX传参时控制器仅能接收为一维如何解决
问题根源
你设置traditional: true后,jQuery序列化嵌套数组时会直接调用内层数组的toString()方法,把每个内层数组转为逗号拼接的字符串,所以后端只能拿到一维字符串数组。而string[,]这类固定维度的多维数组,ASP.NET MVC默认模型绑定器本身不支持直接绑定,所以会触发500错误。
最优解决方案:传递JSON格式数据
这是兼容性最高、适配所有嵌套结构的方案,修改AJAX配置和后端接收逻辑即可:
- 前端AJAX修改:将参数序列化为JSON字符串,指定请求内容类型为JSON,删除
traditional配置:
$.ajax({ type: "POST", url: "@Url.Action("SaveChanges")", contentType: "application/json; charset=utf-8", data: JSON.stringify({ tableValueList: tableValueList }), dataType: 'json', success: function (data) { // 成功逻辑 } });
- 后端控制器修改:参数前加
[FromBody]特性,使用嵌套列表或交错数组接收:
public JsonResult SaveStationConfigChanges([FromBody] List<List<string>> tableValueList) { // 业务逻辑 }
修改完成后即可直接拿到结构化的二维数据,不需要手动拆分字符串。
可选方案:使用默认jQuery序列化
如果不想传JSON,可以删除traditional: true配置,jQuery会自动将二维数组序列化为tableValueList[0][0]=xxx&tableValueList[0][1]=xxx的键值对格式,后端直接用List<List<string>>类型接收即可,不需要加[FromBody]特性。该方案仅适用于嵌套层级不高的场景。
内容的提问来源于stack exchange,提问作者Char
相关产品推荐
相关产品推荐

