注意: 对于有些人来说,可能会认为这是已经回答过的问题,但实际上不是。我已经寻找答案很长时间了。这是一个修改过的版本,来源于 "https://stackoverflow.com/questions/24027245/mvc-any-version-pass-nested-complex-json-object-to-controllers" ,该问题同样没有得到答案。
问题: 通过jQuery AJAX调用向MVC控制器提交JSON数据时,是否可以传递复杂类型的数据,其中包含更多的复杂类型,例如数组嵌套数组?
上面是我的数据。如你所见,
上面的代码片段是我对控制器
这是我观察到的:
var arrayOfarrays = [];
var simpleArray = [];
simpleArray[simpleArray.length] = simpleArray.length + 1;
simpleArray[simpleArray.length] = simpleArray.length + 1;
simpleArray[simpleArray.length] = simpleArray.length + 1;
simpleArray[simpleArray.length] = simpleArray.length + 1;
simpleArray[simpleArray.length] = simpleArray.length + 1;
arrayOfarrays[arrayOfarrays.length] = simpleArray;
arrayOfarrays[arrayOfarrays.length] = simpleArray;
arrayOfarrays[arrayOfarrays.length] = simpleArray;
arrayOfarrays[arrayOfarrays.length] = simpleArray;
arrayOfarrays[arrayOfarrays.length] = simpleArray;
上面是我的数据。如你所见,
simpleArray
只是一个简单的数组,而arrayOfarrays
则是一个数组中包含多个数组的复杂嵌套类型。$.ajax({
url: '/Home/Save',
data: {arrayData:simpleArray, arrayOfarrayData:arrayOfarrays},
type: 'POST',
dataType: 'json',
traditional:true,
cache: false,
success: function (result) {
}
});
上面的代码片段是我对控制器
/Home/Save
进行jQuery ajax调用,下面是控制器本身。请注意,我尝试过使用和不使用traditional:true
选项。[HttpPost]
public JsonResult Save(int[] arrayData, int[][] arrayOfarrayData)
{
return Json("received");
}
这是我观察到的:
- 使用
traditional:true
,我在/Home/Save
控制器中接收到了一个简单的arrayData
数组,但arrayOfarrayData
为空。 - 没有使用
traditional:true
,我接收到null
作为arrayData
,但arrayOfarrayData
被接收为一个5个元素的数组,但这些元素不是你期望的子数组信息,而是空的。
备注:数组嵌套只是一个例子,似乎没有任何NESTED复杂类型可以工作。或者有其他解决方法吗?