jQuery Ajax无法将对象List发送到MVC控制器

时间:2016-12-10 06:16:20

标签: jquery sql-server ajax asp.net-mvc-4

我试图将两个参数发送到MVC控制器方法,以通过Ajax请求将一些信息保存到我的MS SQL Server数据库。我的方法接收一个int和一个复杂类型对象的List。但是,该方法只能接收int参数,并为List接收null。

下面是我用来发送Ajax请求的jQuery脚本' ReferenceNo'和'很多'作为此请求的数据。

jQuery脚本(Ajax)

paramReferenceNo = 2;
paramLots = JSON.stringify(paramLots);
$.ajax({
  contentType: 'application/json; charset=utf-8',
  dataType: 'json',
  type: 'POST',
  url: serverpath + '/Home/Save_Lots',
  data: "{'paramReferenceNo':'" + paramReferenceNo + "', 'paramLots':'" + paramLots + "'}",
  success: function (data) {
    alert('Saved!');
  }
});

以下是将数据保存到SQL Server中的MVC方法。在调试器模式下,当触发Ajax请求时,我可以从断点看到paramReferenceNo'获得int 2但是' paramLots'得到null(Count = 0)。

Save_Lot(MVC_Controller方法)

public void Save_Lots(int paramReferenceNo, List<SalesProd_Lots> paramLots) {
  using (SalesProdDBContext CDC = new SalesProdDBContext()) {
    // Logic to save to database here....
  }
}

请求返回200 -OK的响应。以下是“请求机构”&#39;取自IE网络调试器。

请求正文

{'paramReferenceNo':'2', 'paramLots':'[{"ReferenceNo":1,"LotNo":"CC-1889","isActive":true},{"ReferenceNo":1,"LotNo":"CD-1891","isActive":true},{"ReferenceNo":1,"LotNo":"CE-1892","isActive":true}]'}

我在SO上一直在寻找类似问题,但无法找到适用于我的解决方案。

提前致谢。

1 个答案:

答案 0 :(得分:2)

首先编写一个封装所需参数的视图模型:

public class MyViewModel
{
    public int ParamReferenceNo { get; set; }

    public List<SalesProd_Lots> ParamLots { get; set; }
}

您的控制器操作将作为参数:

public void Save_Lots(MyViewModel viewModel)
{
    ...
}

然后在客户端:

paramReferenceNo = 2;
lots = paramLots; // this could be a complex object

$.ajax({
    contentType: 'application/json; charset=utf-8',
    type: 'POST',
    url: serverpath + '/Home/Save_Lots',
    data: JSON.stringify({
        paramReferenceNo: paramReferenceNo,
        paramLots: lots
    },
    success: function (data) {
        alert('Saved!');
    }
});