2

私がやろうとしているのは、文字列/intの配列をmvcアクションメソッドに渡すことだけです。しかし、データは常にnullとして返されます。何が間違っているのでしょうか?

MVCコントローラー

[HttpPost]
 public ActionResult MyAction(List<string> ids)
 {
   // do something with array
   // But it's null
      return View();
 }

JQuery

$.post("/MyController/MyAction", JSON.stringify(ids), function () { alert("woohoo"); }, "application/json");

アクション結果に投稿されているデータ

["156"]
4

1 に答える 1

3

試す:

... JSON.stringify({ ids : ids }), ...

モデルバインダーは、リスト/配列が何にバインドされているのかわからないと確信しています。

検討:

[HttpPost]
public ActionResult MyAction(List<string> ids, List<string> blah)
{
}

JSONが値の配列として渡される場合、どのパラメーターもバインドしますか?JSONはFORMS送信よりもはるかに複雑になる可能性があるため、もう少し定義が必要です。

たとえば、前の検討事項では次のように機能します。

{
  ids : ["asdf","asdf"],
  blah : ["qwer", "qwer"]
}

アップデート

jsonを適切に送信するには、次のajax呼び出しを行う必要があります。

$.ajax({
  type: "POST",
  url: "/Home/Index",
  data: JSON.stringify( ids ),
  contentType: "application/json; charset=utf-8"
});

Postの最後のパラメーター(指定しapplication/jsonた)は、サーバーから何を期待するかです。デフォルトでは、$。PostはForms Encoded(application/x-www-form-urlencoded)contentTypeを実行します。これは、ショートカットメソッドにハードコードされているように見えます。contentTypeを設定するには、ロングハンドバージョンの$.ajaxを使用する必要があります。

于 2013-03-26T21:08:03.513 に答える