【问题标题】:jQuery Ajax POSTing array to ASP.NET MVC ControllerjQuery Ajax POSTing 数组到 ASP.NET MVC 控制器
【发布时间】:2011-05-23 01:39:51
【问题描述】:

我在这里遗漏了一些东西。我有这个 jQuery JavaScript:

$.ajax({
    type: "POST",
    url: "/update-note-order",
    dataType: "json",
    data: {
        orderedIds: orderedIds,
        unixTimeMs: new Date().getTime()
    }
});

其中orderedIds 是一个JavaScript 数字数组(例如var orderedIds = [1, 2])。

处理Controller的方法是:

[HttpPost]
public void UpdateNoteOrder(long[] orderedIds, long unixTimeMs)
{
    ...
}

当我将Debugger.Break() 放入UpdateNoteOrder() 时,orderedIds 在“监视”窗口中就是null。 (不过,unixTimeMs 有一个数值。)

如何通过$.ajax() 传递数字数组,使orderedIds 在我的控制器中是long[]

【问题讨论】:

    标签: asp.net-mvc jquery http-post


    【解决方案1】:

    您需要将orderedId 转换为参数数组,否则控制器将看不到它

    $.param({ orderedIds: orderedIds });  
    

    在您的代码中:

    $.ajax({
        type: "POST",
        url: "/update-note-order",
        dataType: "json",
        data: {
            orderedIds: $.param({ orderedIds: orderedIds }),
            unixTimeMs: new Date().getTime()
        }
    });
    

    【讨论】:

    • 这不起作用。在 UpdateNoteOrder 中,orderedIds 仍然为空。
    • 如果它不起作用,请先检查您的代码,这直接取自 jquery 文档api.jquery.com/jQuery.param 您可能希望在拒绝答案之前确保您是正确的
    • 我也可以确认这不起作用(我写了一个示例应用程序来测试它)。
    • 我用 1.3.2 进行了测试,我现在看到更改是在 1.4 中。我想我最近没有更新 jquery。
    • 在 jquery 1.3.2 中你甚至不需要$.param,它可以开箱即用。不幸的是,在 jquery 1.4 中这种行为发生了变化。
    【解决方案2】:

    只需将traditional参数设置为true即可:

    $.ajax({
        type: "POST",
        url: "/update-note-order",
        dataType: "json",
        traditional: true,
        data: {
            orderedIds: orderedIds,
            unixTimeMs: new Date().getTime()
        }
    });
    

    从 jquery 1.4 开始存在这个参数是因为将对象序列化为查询参数的机制发生了变化。

    【讨论】:

    • 不幸的是,在我的 Rails 应用程序中,我只得到数组的最后一个元素。我验证了浏览器正在正确发送数组。在上面的示例中,我将 orderedIds: orderedIds 替换为 'orderedIds[]': orderedIds 以使其适用于 Rails。
    • 伟大的。传统的 true 不是将 Viewmodel 用于简单的字符串数组,而是这样做。赞成!
    • 我花了难以置信的时间试图在我的代码中找出这个问题,我偶然发现了这个宝石。感谢您的帮助。
    猜你喜欢
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2013-03-24
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多