mvc中的ajax和事务出错

我有ajax是:

 $( document ).ready(function(){ $('#addtocart').click(function () { var size = $('#ddlsize').val(); var color = $('#ddlcolor').val(); var id ='@Model.ProductId'; alert(size + color +id); $.ajax({ url: '@Url.Action("AddTocart", "ShoppingCart")', data: { id: id, size: size, color: color, }, dataType: "html", type: 'POST', success: function (data) { alert("Da them vao gio hang"); }, error: function () { alert("Co loi xay ra vui long thu lai"); } }); }); });  

在我的控制器

 [HttpPost] public ActionResult AddTocart(int id, string size, string color) { Product productitem = dbcon.Products.Where(p => p.ProductId == id).SingleOrDefault(); var cart = ShoppingCart.Getcart(this.HttpContext); cart.AddtoCart(productitem, size, color); return View(); } 

没有httpget addtocart。当我点击按钮addtocart,ajax中的一些时间错误,但它做动作addtocart并保存在数据库中,一段时间成功和一些时间错误但不保存数据库,我不知道发生了什么问题?

因为这种语法

 url: '@Url.Action("AddTocart", "ShoppingCart")' 

ajax调用的url选项是/ShoppingCart/AddTocart ,因为你调用return View(); 在您的控制器代码中

 [HttpPost] public ActionResult AddTocart(int id, string size, string color) { Product productitem = dbcon.Products.Where(p => p.ProductId == id).SingleOrDefault(); var cart = ShoppingCart.Getcart(this.HttpContext); cart.AddtoCart(productitem, size, color); return View(); } 

你告诉控制器在插入数据库之后打开这个URL: /ShoppingCart/AddTocart ,我猜这不会存在,所以你得到错误,因为你没有/Views/ShoppingCart/AddTocart.cshtml或者你没有在ShoppingCartController类中没有[HttpPost]属性的方法。

 public ActionResult AddTocart() { } 

您应该按如下方式返回json

 [HttpPost] public ActionResult AddTocart(int id, string size, string color) { Product productitem = dbcon.Products.Where(p => p.ProductId == id).SingleOrDefault(); var cart = ShoppingCart.Getcart(this.HttpContext); cart.AddtoCart(productitem, size, color); return Json(new { success = true }); } 

并将dataType选项更改为json