web-dev-qa-db-ja.com

AJAX List <string>が常にNullを返すようにJavaScript文字列配列をJsonResultに送信しますか?

JavaScriptで文字列配列を作成し、アクションメソッドの文字列リストで結果を取得しようとしています。以下は私のJavaScriptの外観です。 jQuery 1.4.2を使用しています。問題は、アクションメソッドのリストが常にNULLを表示していることです。 JavaScriptの文字列配列は、C#の文字列リストに正しくマッピングされませんか?

    var test = ['test1', 'test2'];

    var parms = {
        var1: 'some string',            
        var2: test
    };

    $.ajax({
        type: "POST",
        url: "/Test/JSONTestAction",
        async: false,
        data: parms,
        dataType: "json",
        success: function(data) {

            // success
        }
    });

その後、私のJsonResultは次のようになります。

    public JsonResult JSONTestAction(string var1, List<string> var2)
    {
        // var2 is always NULL -- not good

        return Json(new { test = "test" });
    }
35
aherrick

Jquery 1.4.2に更新した後、同じ問題に直面しました。あなたは解決策を見つけることができます こちら (Ajaxセクションで)。

Ajaxオプションに従来の:trueを追加すると動作するはずです。

$.ajax({
    type: "POST",
    traditional: true,
    url: "/Test/JSONTestAction",
    async: false,
    data: parms,
    dataType: "json",
    success: function(data) {

        // success
    }
});
54
uvita

この変更は、PHP/Railsユーザーのネイティブな動作を改善するためでした paramsの変更については、こちらをご覧ください

次のようにリクエストごとに有効にできます:

$.ajax({ 
 //Stuff...
 traditional:true 
});

または、このようにグローバルに(リクエストを実行する前に一度だけ実行する必要があります):

jQuery.ajaxSettings.traditional = true;
7
Nick Craver