2013-04-29 54 views
1

我的cookie似乎确实创建了它自己,它确实存储了值,但只存储了最后一个值,因此基本上它总是保存1个项目,而当我尝试添加另一个项目时,它只是替换1个项目。 我的代码如下,任何想法表示赞赏。多值饼干,不是多值?

if (Request.Cookies["CartData"] == null) 
    { 
     HttpCookie NewCookie = new HttpCookie("CartData"); 
     Response.Cookies.Add(NewCookie); 
    } 
    /* Process Queries */ 
     int Qty; 
     if (Request.QueryString["Action"] == "AddToCart") 
     { 
      string ProductID = Request.QueryString["ProductID"]; 
      string ProductCategory = Request.QueryString["Category"]; 

      /* Check if Quantity entered is a valid number, if not set to 1 */ 
      if (!int.TryParse(Request.QueryString["Qty"], out Qty)) 
      { 
       Qty = 1; 
      } 

      /* Check if the item already exists in Cart */ 
      if (Request.Cookies["CartData"][ProductID + "_" + ProductCategory] != null) 
      { 
       int tempQty; 
       tempQty = int.Parse(Request.Cookies["CartData"][ProductID + "," + ProductCategory]); 
       tempQty += Qty; 
       Response.Cookies["CartData"][ProductID + "_" + ProductCategory] = tempQty.ToString(); 
      } 
      else 
      { 
       Response.Cookies["CartData"][ProductID + "_" + ProductCategory] = Qty.ToString(); 
      } 
      Response.Cookies["CartData"].Expires = DateTime.Now.AddDays(1); 

     } 

回答

2

在你的代码请求你,当你写的参数使用

Response.Cookies["CartData"][ProductID + "_" + ProductCategory] 

所以你应该更换,由_当同时使用

Request.Cookies["CartData"][ProductID + "," + ProductCategory]) 

是否有任何理由不使用Session来做到这一点?

+0

非常感谢Olaf,虽然我的应用程序似乎仍然持有一个项目,但确实有帮助。但是我注意到如果我继续添加相同的物品,数量会增加!它只有当我添加另一个项目它重置,是否可以是因为每次都重写cookie并且不能更新? PS:我知道如何在会话中做到这一点,我只是想在我去写ASP.NET认证之前练习我的cookie技巧。 :D – RealityDysfunction 2013-04-29 17:35:16

+0

不,他们不应该被改写。我看不出为什么发生。请尝试以下操作:使用Cookie [ProductID +“_”+ ProductCategory]而不是Cookie [“CartData”] [ProductID +“_”+ ProductCategory]。然后你得到多维数组,并且更容易检查是否有其他错误。 – Olaf 2013-04-30 12:08:08