【发布时间】:2016-12-10 06:16:20
【问题描述】:
我正在尝试向 MVC 控制器方法发送两个参数,以通过 Ajax 请求将一些信息保存到我的 MS SQL Server 数据库中。我的方法接收一个 int 和一个复杂类型对象的 List。然而,该方法只能接收 int 参数,并为 List 接收 null。
下面是我用来发送 Ajax 请求的 jQuery 脚本,其中包含“ReferenceNo”和“Lots”作为该请求的数据。
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 的响应。下面是取自 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 上一直在寻找类似的问题,但找不到适合我的解决方案。
提前致谢。
【问题讨论】:
-
您正在传递字符串
paramLots = JSON.stringify(paramLots);并尝试以List的身份访问它 -
删除
paramLots = JSON.stringify(paramLots);并使用data: JSON.stringify({ paramReferenceNo: paramReferenceNo, paramLots: paramLots }), -
@StephenMuecke 谢谢伙计,你的解决方案做到了。介意发表您的评论作为答案,以便我接受吗?
-
Darin Dimitrov 添加了一个答案,表明(视图模型并非完全必要,但也是一个好主意)
标签: jquery sql-server ajax asp.net-mvc-4