けさらんぱさらん

方向性は定めず、ただ思いつくままに

jQuery.ajaxで配列を送信するのに嵌った

jQueryajaxメソッドを使って配列をサーバに送信するのに嵌ったのでメモ

サーバサイドは、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"] },
    });
});

これを実行すると
f:id:cer1974:20130801215728p:plain:w400
valuesはnullです。
バインドが出来ていませんね

Resuestの中身を見てみると
f:id:cer1974:20130801220520p:plain
なんかパラメータ名に変なの付いてる!
実はこれ大かっこなんです。

jQueryのやつが勝手に大かっこなんて付けやがるんですね
ASP.NET MVC的には大迷惑です。

でも回避方法がありました。

$(function () {
    $.ajax({
        url: "Home/Post",
        type: "POST",
        datatype: "json",
        data: { values: ["a", "b"] },
        traditional: true,
    });
});

ajaxメソッドのオプションに
traditional: true
を追加します。

すると
f:id:cer1974:20130801221534p:plain:w400
今度はちゃんと値が入っています。

まああんまりこんな感じで配列を送りたい時がそうそう無いんですけどね