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

jQuery Ajax无法将对象列表发送到MVC控制器,jquery,sql-server,ajax,asp.net-mvc-4,Jquery,Sql Server,Ajax,Asp.net Mvc 4,我试图向MVC控制器方法发送两个参数,以便通过Ajax请求将一些信息保存到MS SQL Server数据库。我的方法接收一个int和一个复杂类型对象列表。但是,该方法只能接收int参数,并接收列表的null 下面是我用来发送Ajax请求的jQuery脚本,其中包含“ReferenceNo”和“Lots”作为该请求的数据 jQuery脚本(Ajax) 下面是将数据保存到SQL Server的MVC方法。在调试器模式下,当Ajax请求被激发时,我可以从断点看到paramReferenceNo”获取i

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

下面是我用来发送Ajax请求的jQuery脚本,其中包含“ReferenceNo”和“Lots”作为该请求的数据

jQuery脚本(Ajax)

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

保存批次(MVC控制器方法)

我一直在寻找类似的问题,但找不到适合我的解决方案


提前感谢。

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

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

    public List<SalesProd_Lots> ParamLots { get; set; }
}
然后在客户端:

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!');
    }
});

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

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

    public List<SalesProd_Lots> ParamLots { get; set; }
}
然后在客户端:

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!');
    }
});

您正在传递String
paramLots=JSON.stringify(paramLots)
并尝试以
List
Delete
paramLots=JSON.stringify(paramLots)的形式访问它data:JSON.stringify({paramReferenceNo:paramReferenceNo,paramLots:paramLots}),
@StephenMuecke谢谢,伙计,你的解决方案成功了。介意将您的评论发布为答案吗?Darin Dimitrov添加了一个答案,表明您正在传递字符串
paramLots=JSON.stringify(paramLots)
并尝试以
List
Delete
paramLots=JSON.stringify(paramLots)的形式访问它data:JSON.stringify({paramReferenceNo:paramReferenceNo,paramLots:paramLots}),
@StephenMuecke谢谢,伙计,你的解决方案成功了。介意将您的评论作为答案发布吗?Darin Dimitrov添加了一个答案,表明(视图模型并非完全必要,但也是一个好主意)不幸的是,应用程序的设计不支持视图模型。我决定沿用原来的设计,暂时取消视图模型。尽管您针对客户端脚本的解决方案似乎很适合我的问题,即使使用我目前使用的双参数MVC方法。谢谢。不幸的是,应用程序的设计不利于视图模型。我决定沿用原来的设计,暂时取消视图模型。尽管您针对客户端脚本的解决方案似乎很适合我的问题,即使使用我目前使用的双参数MVC方法。谢谢
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!');
    }
});