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
我收到arrayData
为null
但是arrayOfarrayData
作为5个元素的数组接收,但元素不是您期望的子数组信息,而是其空的
PS:阵列数组只是一个例子,没有NESTED复杂类型似乎工作。或者有什么办法解决这个问题?
这是正确的,但作为一个旁注,你可能需要在旧的浏览器为JSON.strigify一个填充工具(https://github.com/douglascrockford/JSON -js /)。 – fyjham
此外,作为进一步的补充说明,一旦将数据串联起来,“传统”就无关紧要 - 它对处理数据的方式绝对没有影响,但将其丢弃可能不会造成误导,因为在那里它意味着它正在做某件事。 – fyjham
@ user3398887对不起,但单独使用stringify并没有解决它,但谢谢,我不得不使用stringify和contentType然后它工作,请你修改你的答案,包括contentType,以便我可以标记它是正确的答案:) – Lordbalmon