2012-10-31 79 views
0

當我調試我的actionresult AddToCart。我的車得到其正常使用這裏包含一個productId的值是:爲什麼我的會議購物車清單是空的?

public ActionResult AddToCart(int productID) 
    { 
     List<int> cart = (List<int>)Session["cart"]; 
     if (cart == null){ 
      cart = new List<int>(); 
     } 
     cart.Add(productID); 

     return new JsonResult() { Data = new { Status = "Success" } }; 
    } 

,我使用AJAX來獲取產品編號:

$(function() { 
      $(".a").live("click", function() { 
       var $this = $(this), 
      productID = $this.data('productID'); 
       $.ajax({ 
        url: '/Home/AddToCart', 
        type: "post", 
        cache: false, 
        data: { productID: productID }, 
        success: function (data) { 
         data = eval(data); 
         $this.addClass('productSelected'); 
        }, 
        error: function (result) { 
         $(".validation-summary-errors").append("<li>Error connecting to server.</li>"); 
        } 

       }); 
      }); 

     }); 

但是,當我實現這個的ActionResult我的購物車是空:

public ActionResult ShoppingCart() 
{ 
    var cart = Session["cart"] as List<int>; 

    var products = cart != null ? cart.Select(id => 
      { 
       var product = repository.GetProductById(id); 
       return new ProductsViewModel 
        { 
         Name = product.Name, 
         Description = product.Description, 
         price = product.Price 
        } 
      }) : new List<ProductsViewModel>(); 

    return PartialView(products); 
} 

我在做什麼錯?爲什麼actionresult Shoppingcart有空值這是怎麼回事?當我調試AddToCart時,Cart會獲取一個值並將其添加。

回答

2

你應該將項目添加到它之後更新會話內的購物車對象:

public ActionResult AddToCart(int productID) 
{ 
    List<int> cart = (List<int>)Session["cart"]; 
    if (cart == null){ 
     cart = new List<int>(); 
    } 
    cart.Add(productID); 

    Session["cart"] = cart; 

    return new JsonResult() { Data = new { Status = "Success" } }; 
} 
+0

IIRC這是隻有在session-variable-was-null情況下才需要;如果會話中已經有購物車,那麼會話變量和本地變量引用相同的列表,並且更新一個會更新另一個列表。 (請參閱,例如[這裏](http://stackoverflow.com/questions/6380842/asp-net-do-changes-to-session-objects-persist)。) – Rawling

1

您需要更新會話車太多,像這樣...

public ActionResult AddToCart(int productID) 
{ 
    List<int> cart = (List<int>)Session["cart"]; 
    if (cart == null){ 
     Session["cart"] = cart = new List<int>(); 
    } 
    cart.Add(productID); 

    return new JsonResult() { Data = new { Status = "Success" } }; 
}