注意:可能有人要求有人将此标记为已经回答的问题,但事实并非如此,我一直在寻找答案。这是" 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
我收到arrayData
这是/Home/Save
控制器中的简单数组,但arrayOfarrayData
为空traditional:true
我收到arrayData
作为null
,但arrayOfarrayData
作为5个元素的数组收到,但元素不是您期望的子数组信息但是它是空的PS:数组数组只是一个例子,没有NESTED复杂类型似乎可行。或者有什么方法可以解决这个问题吗?
答案 0 :(得分:4)
我认为您需要对数据进行字符串化
var dataToSend={
'arrayData':simpleArray,
'arrayOfarrayData':arrayOfarrays
};
$.ajax({
url: '/Home/Save',
data: JSON.stringify(dataToSend),
type: 'POST',
contentType: 'application/json',
dataType: 'json',
traditional:true,
cache: false,
success: function (result) {
}
});