mvc中的ajax和事务出错

时间:2014-11-14 14:35:45

标签: jquery ajax asp.net-mvc asp.net-ajax

我有ajax是:

<script>
  $( 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");
        }
      });
    });
  });
</script>

在我的控制器中

[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并保存在数据库中,一段时间成功和一些时间错误但不保存数据库,我不知道发生了什么问题?

1 个答案:

答案 0 :(得分:0)

由于这种语法

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();
}

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

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

<script>
  $( 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: "json",
        type: 'POST',
        success: function (data) {
          alert("Da them vao gio hang");
        },
        error: function () {
          alert("Co loi xay ra vui long thu lai");
        }
      });
    });
  });
</script>