2012-04-06 5 views
2

Ich bin mir nicht sicher, ob es den gesamten Inhalt des Cookies löscht, oder einfach nicht das existierende Cookie vom Benutzer abruft, hinzufügt und zurückgibt. HierIn den Warenkorb Funktionalität mit Cookies löscht alle Inhalte?

ist der Code:

[Authorize] 
public ActionResult AddToCart(int productId, int quantity) 
{ 
    //If the cart cookie doesn't exist, create it. 
    if (Request.Cookies["cart"] == null) 
    { 
     Response.Cookies.Add(new HttpCookie("cart")); 
    } 

    //If the cart already has this item, add the amount to it. 
    if (Request.Cookies["cart"].Values[productId.ToString()] != null) 
    { 
     int tmpAmount = Convert.ToInt32(Request.Cookies["cart"].Values[productId.ToString()]); 
     Response.Cookies["cart"].Values.Add(productId.ToString(), (quantity + tmpAmount).ToString()); 
    } 
    else 
    { 
     Response.Cookies["cart"].Values.Add(productId.ToString(), quantity.ToString()); 
    } 

    return RedirectToAction("Index"); 
} 

ich Stützpunkte verwendet habe, und kann bestätigen, dass, wenn ich einen Artikel im Cookie haben, und dann wieder eine neue Position hinzufügen, der Code ausgeführt wird nicht korrekt Response.Cookies.Add(new HttpCookie("cart")); ausführt . Also glaube ich nicht, dass ich einen neuen Keks kreiere.

In der Tat, ich versuche, den gleichen Artikel, den ich richtig sehe, dass der Betrag für diesen Artikel erhöht wird, anstatt es zweimal aufgeführt.

Ich denke, mein Problem liegt darin, in den vorhandenen Cookie zu schreiben?

Erwartetes Ergebnis nach einem weiteren Elemente hinzu:

Siehe zwei Artikel im Warenkorb Seite.

Tatsächliches Ergebnis:

Sehen Sie nur den neuesten Artikel, den ich in der Korb Seite hinzugefügt.

Irgendwelche eklatanten Fehler? Dies ist mein erster Ausflug in Cookies.

Antwort

0

ich es geschafft, dieses Problem zu lösen, indem die Folgecode:

Es schien, dass ein einzelner Wert zu dem Schlüssel hinzufügen, die restlichen Werte verursacht zu verschwinden. Was ich getan habe, war eine Hilfsmethode zu erstellen, die den vorhandenen Cookie zusammen mit der bald hinzugefügten Produkt-ID und Menge erhalten hat.

Unten ist, wie ich es aufrufen.

[Authorize] 
public ActionResult AddToCart(int productId, int quantity) 
{ 
    //If the cart cookie doesn't exist, create it. 
    if (Request.Cookies["cart"] == null) 
    { 
     Response.Cookies.Add(new HttpCookie("cart")); 
    } 

    //Helper method here. 
    var values = GenerateNameValueCollection(Request.Cookies["cart"], productId, quantity); 
    Response.Cookies["cart"].Values.Add(values); 

    return RedirectToAction("Index"); 
} 

Und hier ist, dass Hilfsmethode:

private NameValueCollection GenerateNameValueCollection(HttpCookie cookie, int productId, int quantity) 
{ 
    var collection = new NameValueCollection(); 
    foreach (var value in cookie.Values) 
    { 
     //If the current element isn't the first empty element. 
     if (value != null) 
     { 
      collection.Add(value.ToString(), cookie.Values[value.ToString()]); 
     } 
    } 

    //Does this product exist in the cookie? 
    if (cookie.Values[productId.ToString()] != null) 
    { 
     collection.Remove(productId.ToString()); 
     //Get current count of item in cart. 
     int tmpAmount = Convert.ToInt32(cookie.Values[productId.ToString()]); 
     int total = tmpAmount + quantity; 
     collection.Add(productId.ToString(), total.ToString()); 
    } 
    else //It doesn't exist, so add it. 
    { 
     collection.Add(productId.ToString(), quantity.ToString()); 
    } 

    if (!collection.HasKeys()) 
     collection.Add(productId.ToString(), quantity.ToString()); 

    return collection; 
} 
2

Versuchen Sie, eine neues Cookie jedes Mal, und das Hinzufügen von alle Werte schaffen, die es sein sollte (die vorhandenen Werte in das neue Cookie lesen dann alle neuen Werte hinzufügen).

Aus der MSDN-Dokumentation, http://msdn.microsoft.com/en-us/library/ms178194.aspx

Sie können ein Cookie nicht direkt ändern. Stattdessen besteht die Änderung eines Cookies darin, ein neues Cookie mit neuen Werten zu erstellen und dann das Cookie an den Browser zu senden, um die alte Version auf dem Client zu überschreiben.

Möchten Sie auch, dass der Cookie auf der Festplatte des Benutzers verbleibt? In diesem Fall müssen Sie ein Ablaufdatum für den Cookie festlegen.

+0

Dieser den Trick, werde ich meine eigene Frage mit dem Code beantworte ich verwenden, um dieses Problem zu beheben. –

Verwandte Themen