如何在没有回发的情况下使网站响应?

时间:2016-11-25 17:33:35

标签: c# jquery asp.net asp.net-mvc cookies

到目前为止,我在将产品添加到购物车时(使用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解决此问题的最佳选择是什么?

1 个答案:

答案 0 :(得分: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...
                }

            }
        });