17

このようにjQueryでintのリストを送信すると:

$.ajax('@Url.Action("Execute")', {
    type: 'POST',
    data: {
        pkList: [1,2,3]
    }
});

次に、jQueryはpkListオブジェクトを変換し、次のように投稿で送信します。

pkList[]:1
pkList[]:2
pkList[]:3

サーバーがPHPの場合は問題ありませんが、Asp.NET MVC3を使用して、デフォルトのモデルバインダーを使用してこれらの値を取得しようとしています。

public ActionResult Execute(ICollection<int> pkList)

ただし、pkListは常にnullであり、デフォルトのモデルバインダーはそれをバインドできないようです。

これを正しく解決するにはどうすればよいですか?


追加された ソリューション

traditional私は、jQueryでオプションを設定してDarinDimitrovのソリューションを使用しました。

$.ajax('@Url.Action("Execute")', {
    type: 'POST',
    traditional: true,
    data: {
        pkList: [1,2,3]
    }
});

これで、jQueryは[]パラメータにを追加しなくなり、次のように送信されます。

pkList:1
pkList:2
pkList:3

また、MVCのデフォルトモデルバインダーは値を正しく取得します。

これが誰かを助けることを願っています。

4

3 に答える 3

21

JSONリクエストを使用すると、必要な複雑なオブジェクトを送信できるようになります。

$.ajax({
    url: '@Url.Action("Execute")',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({ pkList: [1, 2, 3] }), // you could throw any javascript object you like here
    success: function(result) {
        // process the results
    }
});

このメソッドは最新のブラウザーに組み込まれており、レガシーブラウザーをサポートする場合は、 json2.jsスクリプトをサイトにJSON.stringify含めることができます。

また、質問に答えるには、jQuery 1.4で変更されたため、パラメータの従来traditional: trueのシリアル化にフォールバックするようにjQueryに指示するオプションを設定できます。新しいバージョンを使用している場合は、パラメータのシリアル化方法に戻すことができます。 :

$.ajax({ 
    url: '@Url.Action("Execute")',
    type: 'POST',
    data: {
        pkList: [1, 2, 3]
    },
    traditional: true
});
于 2011-10-28T17:16:21.400 に答える
1

@Darinがコントローラーのアクションを見逃しているため、これを追加します。

Javaスクリプトコード:

function sendArray() {
    var list = ["a", "b"];

    $.ajax({
        url: '@Url.Action("ActionName")',
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({ list }),
        dataType: "json",
        success: function (response) {},
        error: function (response) {}
    });
}

C#コード

[HttpPost]
public ActionResult ActionName(List<string> list)
{
    return View();
}
于 2018-07-13T15:36:41.277 に答える
0

Phil Haackのブログには、あなたを正しい方向に向ける素晴らしい記事があります。

リストへのモデルのバインド

于 2011-10-28T17:13:41.107 に答える