web-dev-qa-db-ja.com

jQuery Ajax ASP.NET MVCコントローラーへの配列のPOST

ここに何かがありません。私はこの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には数値があります。)

orderedIdsがコントローラーの_long[]_になるように、$.ajax()を介して数値配列を渡すにはどうすればよいですか?

traditional パラメーターをtrueに設定するだけです:

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

Jquery 1.4以降、このパラメーターが存在するのは、オブジェクトをクエリパラメーターにシリアル化するメカニズムが変更されたためです。

123
Darin Dimitrov

orderedIdをparam配列に変換する必要があります。そうしないと、コントローラーに表示されません。

$.param({ orderedIds: orderedIds });  

あなたのコードで:

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