到目前为止,我在将产品添加到购物车时(使用JQuery将Product.Id
添加到Cookie中)使我的网站无需回发即可响应。
当用户访问购物车/结帐页面时,我会从控制器中的Cookie中读取所有Id
并将所有记录放入cartList
并将其传递给视图。
现在我陷入困境,因为当我想从购物车中删除产品时,我不知道如何在不回发的情况下解决它。
是否可以做类似/相应的事情:
cartList.Remove(db.Products.SingleOrDefault(x=> x.Id == /*Id to remove from cart*/));
在视图中?
我的代码:
我使用JQuery(从foreach循环获取id Product.Id
)将data-id="@item.ID"
添加到Cookie中:
$('.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'));
}
});
这是我在访问购物车/结帐页面时在Controller内部添加产品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);
}
然后,我在foreach
内以/Cart/View
循环显示所有内容。
为Asp.Net MVC解决此问题的最佳选择是什么?
答案 0 :(得分:0)
responsive website和postback是不同的事情。
回答你的问题,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...
}
}
});