我在这些代码下面尝试了很多次。但它仍然认为该值为null。
var cartViewModel = [];
$(":text").each(function (i) {
var quantity = parseInt($(this).val());
var id = parseInt($(this).data("id"));
cartViewModel.push({ id: id, quantity: quantity });
}
and next I use $.post to submit cartViewModel
the code such like:
var data= { data: JSON.stringify(cartViewModel) };
$.post(url,data,function(json){
//....
});
public class ShoppingCartViewModel
{
public int Id { get; set; }
public int Quantity { get; set; }
}
[HttpPost]
public ActionResult SubmitCart(List<ShoppingCartViewModel> models)
{
return Json(result);
}
但arg'models'也是null,我感到非常困惑。谁能指出正确的方法。 THX!
答案 0 :(得分:2)
模型绑定器期望名为models的属性,但您使用的是名称data
。如果你改变
var data= { data: JSON.stringify(cartViewModel) };
到
var data= { models: JSON.stringify(cartViewModel) };
编辑:
您的模型属性现在为空的原因是您正在调用JSON.stringify(cartViewModel)
。不是将动作传递给一个对象数组,而是将它传递给一个字符串(恰好是一个对象数组的表示)。
将您的数据定义更改为:
var data = { models: cartViewModel };
再次编辑:
以上适用于MVC5。它在MVC4中不起作用。使它在MVC4中工作:
$.ajax({
type: 'POST',
url: '@Url.Action("Add", "Home")',
data: JSON.stringify({ models: cartViewModel }),
contentType: 'application/json',
});