【问题标题】:Passing nested arrays to asp.net mvc using jQuery's $.ajax使用 jQuery 的 $.ajax 将嵌套数组传递给 asp.net mvc
【发布时间】:2010-08-11 19:30:31
【问题描述】:

我正在尝试将嵌套数组传递给 asp.net mvc 控制器,如下所示:

var subgroups = [];
subgroups [0] = [["A", "Y"],
                 ["B", "Y"],
                 ["C", "Y"]];
subgroups [1] = [["D", "Z"],
                 ["E", "Z"],
                 ["F", "Z"]];

$.ajax({ url: "<%= Url.Content("~/Controller/Action") %>", data: { subgroups: subgroups },
         dataType: "json", context: document.body, success: function(data) { ... } );

生成的控制器:

public ContentResult Action(List<string[][]> subgroups) {
    ...
}

问题是控制器中生成的子组变量如下所示:

subgroups[0][0] == null;
subgroups[0][1] == null;
subgroups[0][2] == null;
subgroups[1][0] == null;
subgroups[1][1] == null;
subgroups[1][2] == null;

深度嵌套数组中的值不会被传递。 Firebug 报告我的 ajax 请求的参数是:

subgroups[0][0][] A
subgroups[0][0][] Y
subgroups[0][1][] B
subgroups[0][1][] Y
subgroups[0][2][] C
subgroups[0][2][] Y
subgroups[1][0][] D
subgroups[1][0][] Z
subgroups[1][1][] E
subgroups[1][1][] Z
subgroups[1][2][] F
subgroups[1][2][] Z

看起来原因是 jQuery 没有填写这些数组索引,因为我可以解决的问题是我将数据格式化为:

subgroups [0] = [{ 0: "A", 1: "Y"}, ...];

为什么 jQuery 为外部数组放置索引,而不是内部数组?请告诉我有比手动指定数字键更好的解决方法吗?

【问题讨论】:

    标签: jquery asp.net-mvc arrays


    【解决方案1】:

    在文件“code.jquery.com/jquery-1.4.2.js”的第 5290 行:

    buildParams( prefix + "[" + ( typeof v === "object" jQuery.isArray(v) ? i : "" ) + "]", v );
    

    我修改了这段代码:

    buildParams(prefix + (typeof v === "object" jQuery.isArray(v) ? "[" + i + "]" : ""), v);
    

    结果很好。我无法测试更多案例。

    我在 jQuery.com 中创建了一张票,看看这是否是一个错误: Ticket #6900 (new bug)

    但在:

    public ContentResult Action(List<string[][]> subgroups) {
    

    对于这个修改,你必须使用这个代码:

    public ContentResult Action(List<string[]> subgroups) {
    

    【讨论】:

    • +1 作为我遇到的最勇敢的 jquery 人之一 :)
    • 您的解决方案不太适合我,但它帮助我找到了解决方案,将第 5419 行更改为:buildParams( prefix + "[" + i + "]", v ); 感谢您打开错误报告并引导我找到解决方案。我不确定这是错误还是预期的 jQuery 行为,但对于运行 ASP.net MVC 的人来说,这种行为似乎更有用。
    • 是的,我复制错了行号,正确的是5419。谢谢
    【解决方案2】:

    如果其他人像我一样偶然发现这个问题,但不喜欢修改 jQuery 以使用您的特定服务器软件的想法,我最终使用 JSON.stringify() 将嵌套数组的 JSON 字符串传递给服务器,然后在服务器上解码该 JSON 字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 2018-09-10
      • 2016-01-05
      • 1970-01-01
      相关资源
      最近更新 更多