将NESTED Complex json传递给MVC控制器

时间:2014-06-06 00:52:26

标签: jquery ajax asp.net-mvc json

注意:可能有人要求有人将此标记为已经回答的问题,但事实并非如此,我一直在寻找答案。这是" 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复杂类型似乎可行。或者有什么方法可以解决这个问题吗?

1 个答案:

答案 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) {
    }
});