2014-06-06 31 views
1

注意:它可能会敦促有人将此标记为已经回答的问题,但它不是,我一直在寻找答案很长一段时间。这是“https://stackoverflow.com/questions/24027245/mvc-any-version-pass-nested-complex-json-object-to-controllers”的修改版本,也没有得到回答。将NESTED复杂的json传递给MVC控制器

问题:是否有可能通过jQuery发布JSON数据ajax调用MVC控制器,您传递的数据是一个复杂类型,其中包含更复杂的类型?示例数组数组。

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

上述片段是我的jQuery AJAX调用到控制器/Home/Save和这里下面是控制器本身。请注意,我尝试过并且没有traditional:true选项。

[HttpPost] 
public JsonResult Save(int[] arrayData, int[][] arrayOfarrayData) 
{ 
    return Json("received"); 
} 

这是我观察到:

  • 随着traditional:true我收到arrayData这是在/Home/Save控制器的简单排列,但arrayOfarrayData是空
  • 没有traditional:true我收到arrayDatanull但是arrayOfarrayData作为5个元素的数组接收,但元素不是您期望的子数组信息,而是其空的

PS:阵列数组只是一个例子,没有NESTED复杂类型似乎工作。或者有什么办法解决这个问题?

回答

3

我认为你需要字符串化数据

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) { 
    } 
}); 
+0

这是正确的,但作为一个旁注,你可能需要在旧的浏览器为JSON.strigify一个填充工具(https://github.com/douglascrockford/JSON -js /)。 – fyjham

+0

此外,作为进一步的补充说明,一旦将数据串联起来,“传统”就无关紧要 - 它对处理数据的方式绝对没有影响,但将其丢弃可能不会造成误导,因为在那里它意味着它正在做某件事。 – fyjham

+0

@ user3398887对不起,但单独使用stringify并没有解决它,但谢谢,我不得不使用stringify和contentType然后它工作,请你修改你的答案,包括contentType,以便我可以标记它是正确的答案:) – Lordbalmon

相关问题