MVC 4:将复杂对象传递给异步控制器操作

时间:2013-03-11 10:51:48

标签: jquery asp.net-mvc asp.net-mvc-4

我正在尝试使用Javascript将订单行列表传递给异步控制器操作:

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

当我在运行时检查模型变量时,订单行属性的值设置为ok。但是当我在我的控制器动作中放置断点时,订单行传入参数的属性为0.看起来JSON字符串未正确反序列化。

控制器操作如下所示:

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

如何正确地将复杂对象传递给异步控制器操作?

谢谢, 尼尔斯

1 个答案:

答案 0 :(得分: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字符串,而是javascript数组对象,其中每个元素都反映了OrderLine模型的结构。