JQuery Ajax POSTing массив для контроллера ASP.NET MVC - PullRequest
57 голосов
/ 09 декабря 2010

Я что-то здесь упускаю.У меня есть этот 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 в окне Watch.(unixTimeMs, однако, имеет числовое значение.)

Как передать массив чисел через $.ajax() так, чтобы orderedIds было long[] в моем контроллере?

Ответы [ 2 ]

123 голосов
/ 09 декабря 2010

Просто установите для параметра traditional значение true:

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

Начиная с jquery 1.4, этот параметр существует, поскольку изменился механизм сериализации объектов в параметры запроса.

0 голосов
/ 09 декабря 2010

вам нужно превратить orderId в массив параметров, иначе контроллер не увидит его

$.param({ orderedIds: orderedIds });  

в вашем коде:

$.ajax({
    type: "POST",
    url: "/update-note-order",
    dataType: "json",
    data: {
        orderedIds: $.param({ orderedIds: orderedIds }),
        unixTimeMs: new Date().getTime()
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...