フォームなしで文字列の配列を ASP.NET MVC コントローラーに投稿するにはどうすればよいですか? 質問する

フォームなしで文字列の配列を ASP.NET MVC コントローラーに投稿するにはどうすればよいですか? 質問する

私は ASP.NET MVC と JQuery を学習するために小さなアプリを作成しています。ページの 1 つは、選択できる項目のリストです。次に、ボタンを押して、JQuery の Post 関数を使用して、選択された項目の ID を含むリスト (または同等のもの) をコントローラーに送信したいと思います。

選択された要素の ID を含む配列を取得できたので、それを投稿したいと思います。これを行う 1 つの方法は、ページに非表示の値を持つダミー フォームを用意し、選択された項目で非表示の値を設定して、そのフォームを投稿することです。ただし、これは見た目が不格好です。

配列をコントローラーに直接送信することで、これを実現するよりクリーンな方法はありますか? いくつか試してみましたが、コントローラーは受信したデータをマップできないようです。これまでのコードは次のとおりです。

function generateList(selectedValues) {
   var s = {
      values: selectedValues //selectedValues is an array of string
   };
   $.post("/Home/GenerateList", $.toJSON(s), function() { alert("back") }, "json");
}

そして私のコントローラーはこのようになります

public ActionResult GenerateList(List<string> values)
{
    //do something
}

私が取得できたのは、コントローラー パラメーターの「null」だけです...

任意のヒント?

ベストアンサー1

私は自分の回答を修正し、作成したテスト アプリのコードを含めました。

更新: jQuery を更新して 'traditional' 設定を true に設定し、これが再び機能するようになりました (@DustinDavis の回答による)。

まずJavaScript:

function test()
{
    var stringArray = new Array();
    stringArray[0] = "item1";
    stringArray[1] = "item2";
    stringArray[2] = "item3";
    var postData = { values: stringArray };
    
    $.ajax({
        type: "POST",
        url: "/Home/SaveList",
        data: postData,
        success: function(data){
            alert(data.Result);
        },
        dataType: "json",
        traditional: true
    });
}

コントローラー クラスのコードは次のとおりです。

public JsonResult SaveList(List<String> values)
{
    return Json(new { Result = String.Format("Fist item in list: '{0}'", values[0]) });
}

その JavaScript 関数を呼び出すと、「リストの最初の項目: 'item1'」というアラートが表示されます。

おすすめ記事