こちらの投稿で話題にしていた、ASP.NET MVC と jQuery による AJAX の話。
要件をおさらいしておくと、jQuery の $.ajax によって ASP.NET MVC のコントローラ/アクションメソッドを AJAX コールするが、この際に配列をアクションメソッドの引数に渡したい、ということがお題。
前回投稿に貴重なコメントを頂戴しまして、どうやら、$.ajax に渡すオプション指定において、
traditional というプロパティに true を設定すればよいとのこと。
すなわち、
$.ajax({
type: "POST",
url: "/My/Action",
traditional: true,
data: {foo: ["bar1", "bar2"]},
success: function(){ ... },
...
});
とすることで、サーバー側に POST される内容が、(traditional:true を指定する以前は)
"foo[]=bar1&foo[]=bar2"
であったところが、
"foo=bar1&foo=bar2"
となり、これは ASP.NET MVC のモデルバインダーが正しく期待どおりにバインドしてくれるのであった。
この traditional プロパティや、form化の挙動については、jQuery 1.4 頃を境に変動があったらしい。
stackoverflow.com では既出の話題だったようだ。