0

ajaxを使用して、チェックボックスのIDをコントローラーに渡そうとしています。ここにjqueryがあります:

function compareEvents() {
        var selected = new Array();
        $('input:checked').each(function () {
            selected.push($(this).attr('id'));
            alert("Event " + $(this).attr('id') + " will be compared");
        });

        $.ajax({
            url: "/Event/CompareEvents",
            contentType: "application/x-www-form-urlencoded",
            type: "POST",
            datatype: "json",
            data: JSON.stringify({eventIds:selected}),
            error: function (xmlHttpRequest, errorText, thrownError) {
                alert(xmlHttpRequest, errorText, thrownError);
            },
            success: function (data) {
                alert("success");
                document.location = data;
            }
        });

アラートは、チェックされたチェックボックスの ID を正常に返します。完了時に成功メッセージを返します。

コントローラーメソッドは次のとおりです。

    [HttpPost]
    public ActionResult CompareEvents(List<int> eventIds)
    {
        return null;
    }

これは、デバッグ時を除いて正常に呼び出され、eventIds返されnullます。なぜeventIds正しい値が得られないのか誰にもわかりますか?

4

1 に答える 1

2

JSON を送信しています:

data: JSON.stringify({ eventIds:selected }),

contentType ヘッダーを に設定します"application/x-www-form-urlencoded"

送信する内容に一貫性を持たせる:

contentType: "application/json",

という設定もありませんdatatype。実際の設定はありますが、コントローラーのアクションが Content-Type 応答ヘッダーを に設定している場合 (通常、 を返す場合はこれに設定する必要があります)、jQuery はこのヘッダーを使用してサーバーからの応答を処理するのに十分なほどインテリジェントでdataTypeあるため、冗長です。既に解析されたオブジェクトを成功のコールバックに渡します。application/jsonJsonResult

于 2013-05-29T15:44:04.233 に答える