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

ngr*_*son 0 asp.net-mvc jquery asp.net-mvc-4

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

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

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

控制器操作如下所示:

public ActionResult AsyncUpdateOrderline(List<OrderLine> orderLines)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢,尼尔斯

Dar*_*rov 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) {
        ...
    }
});
Run Code Online (Sandbox Code Playgroud)

注意模型不应该是JSON字符串,而是javascript数组对象,其中每个元素都反映了OrderLine模型的结构.