JQuery AJAX POSTing массив для ASP.NET MVC Controller

Мне что-то не хватает. У меня есть 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)
{
    ...
}

Когда я помещаю a Debugger.Break() в UpdateNoteOrder(), orderedIds - null в окне просмотра. (unixTimeMs, однако, имеет числовое значение.)

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

Ответ 1

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

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

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

Ответ 2

вам нужно будет поменять orderedId в массив param или контроллер не увидит его

$.param({ orderedIds: orderedIds });  

в вашем коде:

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