当我ajax发布json数据但也收到null

时间:2015-03-12 18:43:07

标签: ajax json asp.net-mvc

我在这些代码下面尝试了很多次。但它仍然认为该值为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!

1 个答案:

答案 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',
});