2016-11-25 64 views
0

到目前爲止,我將產品添加到購物車(增加Product.Id將Cookie使用jQuery)時,使我的網站響應無回傳。如何讓網站響應而不回發?

當用戶訪問Cart/Checkout頁面時,我從控制器的Cookie中讀取所有Id的記錄,並將所有記錄放入cartList並將其傳遞給View。

現在我堅持,因爲我不知道如何解決它沒有回發時,我想從購物車中移除產品。

是否有可能做同樣的事情/對應這樣的:

cartList.Remove(db.Products.SingleOrDefault(x=> x.Id == /*Id to remove from cart*/)); 
在查看

我的代碼:

我加Product.Id到使用jQuery的cookie(獲取IDdata-id="@item.ID"從foreach循環):

$('.add-to-cart').click(function() { 

    if ($.cookie("AddedProductId") != null) { 
     var previousValues = $.cookie("AddedProductId"); 
     $.cookie("AddedProductId", previousValues + '_' + $(this).data('id')); 
    }else{ 
     $.cookie("AddedProductId", $(this).data('id')); 
    } 
}); 

這是我如何保持cartList有附加值的產品,內部控制器,當您訪問購物車/結帳頁面:

public ActionResult Cart(){ 

     var cart = Request.Cookies["AddedProductId"].Value; 

     String[] elements = Regex.Split(cart, "_");   
     List<Product> cartList = new List<Product>(); 

     foreach (var item in elements){ 
      cartList.Add(db.Products.SingleOrDefault(x => x.ID == new Guid(item))); 
     }  
     return View(cartList); 
} 

我然後顯示裏面/Cart/View一個foreach循環的一切。

什麼來解決這個爲Asp.Net MVC的最佳選擇?

回答

0

一個responsive websitepostback是不同的東西。

回答你的問題,一個Ajax請求是在控制器加一個解決方案

[HttpPost] 
public JsonResult Remove(Guid id) 
{  
    cartList.RemoveAll(p => p.ID.Equals(id)); 

    return Json(new { removed = true }); 
} 

的jQuery:

$.ajax({ 
      url: '/Cart/Remove', 
      type: 'POST', 
      dataType: 'json', 
      data: { id: <here selected ID> }, 
      success: function (json) { 
       if(json.removed) { 
        // your code... 
       } 

      } 
     }); 
+0

我不能讓它工作,我甚至設置斷點我的控制器,它不會去'刪除'的方法。這也正確完成:'data:$(this).data('id')'?我想在「//你的代碼......」部分放什麼? – fagol

+0

使用'@ Url.Action(「刪除」,「車」)'方法,這將返回你,你應該使用正確的路徑。 也許應用程序被配置爲與[應用路徑(https://msdn.microsoft.com/en-us/library/system.web.httprequest.applicationpath(V = vs.110)的.aspx)。 在'//你的code',是如果以正確的方式消除 – karritos

+0

由於它的工作現在將要進行的操作! – fagol