2014-11-14 47 views
1

我有阿賈克斯阿賈克斯和交易是:錯誤與MVC

<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.When我點擊按鈕addtocart,一段時間錯誤ajax,但它做動作addtocart和保存在數據庫中,一些時間的成功和一些時間錯誤,但沒有保存數據庫,我不知道發生了什麼問題?

+1

'返回查看();'是錯誤的Ajax調用,您需要使用類似於'return Json(new {success = true});' – markpsmith 2014-11-14 14:40:26

+0

它會產生錯誤或者一些時間@markpsmith,因爲我有另外一個像這樣的ajax並且返回視圖,但是它也會成功s, – 2014-11-14 14:56:45

+0

你有什麼錯誤? – ekad 2014-11-14 15:01:45

回答

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

你告訴控制器打開插入到數據庫後這個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

<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> 
+0

我可以理解一點,但它在第一次運行本地主機時出錯,之後它幾乎成功,而且ekad如果我返回一個視圖,並且我有這個視圖,是這個錯誤? – 2014-11-17 11:34:40

+0

如果你有這樣的觀點:'/ ShoppingCart/AddTocart.cshtml'並且你有'public ActionResult AddTocart'方法,但沒有'ShoppingCartController'中的[HttpPost]'屬性,那麼你不會得到錯誤,但它取決於在ajax調用成功後你想要做什麼,你真的想重定向到'/ ShoppingCart/AddTocart'嗎? – ekad 2014-11-17 11:46:46