jQuery.ajaxで配列を送信するのに嵌った
jQueryのajaxメソッドを使って配列をサーバに送信するのに嵌ったのでメモ
サーバサイドは、ASP.NET MVCです。
まずサーバサイドのコード
[HttpPost] public ActionResult Post(string[] values) { return View(); }
引数で文字列の配列を取ります。
予定では、モデルバインダーで自動的にvaluesに値が入るはずです。
で、問題のJavaScriptのコード
$(function () { $.ajax({ url: "Home/Post", type: "POST", datatype: "json", data: { values: ["a", "b"] }, }); });
これを実行すると
valuesはnullです。
バインドが出来ていませんね
Resuestの中身を見てみると
なんかパラメータ名に変なの付いてる!
実はこれ大かっこなんです。
jQueryのやつが勝手に大かっこなんて付けやがるんですね
ASP.NET MVC的には大迷惑です。
でも回避方法がありました。
$(function () { $.ajax({ url: "Home/Post", type: "POST", datatype: "json", data: { values: ["a", "b"] }, traditional: true, }); });
ajaxメソッドのオプションに
traditional: true
を追加します。
すると
今度はちゃんと値が入っています。
まああんまりこんな感じで配列を送りたい時がそうそう無いんですけどね