0

Javascript を使用して、オーダーラインのリストを非同期コントローラー アクションに渡そうとしています。

var model = "<some JSON string>";
$.ajax({ type: "POST",
  url: "/MyController/MyAction",
  datatype: "json",
  data: { 'orderLines': model},
  success: function(msg) {
     ...
  }
});

実行時にモデル変数を確認すると、オーダーライン プロパティの値が正常に設定されています。しかし、コントローラー アクションにブレークポイントを設定すると、orderline の入力パラメーターのプロパティが 0 になります。JSON 文字列が適切に逆シリアル化されていないようです。

コントローラーのアクションは次のようになります。

public ActionResult AsyncUpdateOrderline(List<OrderLine> orderLines)
{
  ...
}

複雑なオブジェクトを非同期コントローラー アクションに正しく渡すにはどうすればよいですか?

ありがとう、ニルス

4

1 に答える 1

6

リクエストの Content-Type ヘッダーを設定し、JSON.stringifyメソッドを使用してコントローラーにデータを送信する必要があります。

var model = [
    { quantity: 1, name: 'some name 1' },
    { quantity: 2, name: 'some name 2' }
];

$.ajax({ 
    url: '/MyController/MyAction',
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({ orderLines: model }),
    success: function(msg) {
        ...
    }
});

モデルが JSON 文字列ではなく、各要素がOrderLineモデルの構造を反映している JavaScript 配列オブジェクトであることに注意してください。

于 2013-03-11T10:53:21.847 に答える