2016-04-30 6 views
0

ich einen Einkaufswagen in mvc5 mit Session schreiben, aber ich will die Umsetzung mit cookies.Here ersetzen sind, Maßnahmen, um:Wie kann ich Generic List in HttpCookie in C# speichern?

public ActionResult OrderNow(int id) 
    { 
     if(Session["cart"]==null) 
     { 
      List<Item> cart = new List<Item>(); 
      cart.Add(new Item(de.Products.Find(id),1)); 
      Session["cart"] = cart; 
     } 
     else 
     { 
      List<Item> cart = (List<Item>)Session["cart"]; 
      int index = isExisting(id); 
      if (index == -1) 
       cart.Add(new Item(de.Products.Find(id), 1)); 
      else 
       cart[index].Quantity++; 
      Session["cart"] = cart; 
     } 
     return View("Cart"); 
    } 

und die Item-Klasse ist:

public class Item 
{ 
    private Product pr = new Product(); 

    public Product Pr 
    { 
     get { return pr; } 
     set { pr = value; } 
    } 


    private int quantity; 

    public int Quantity 
    { 
     get { return quantity; } 
     set { quantity = value; } 
    } 
    public Item(Product product, int quantity) 
    { 
     this.pr = product; 
     this.quantity = quantity; 
    } 
} 

ich ersetzen, wenn Block mit:

if(Request.Cookies["cart"]==null) 
     { 
      List<Item> cart = new List<Item>(); 
      cart.Add(new Item(de.Products.Find(id),1)); 
      Request.Cookies["cart"] = cart; 
     } 

aber ich habe zwei Fehler: kann nicht implizit Typ ‚System.Collections.Generic.List‘ auf ‚System.Web.HttpC konvertieren ookie '
und Eigenschaft oder Indexer' System.Web.HttpCookieCollection.this [Zeichenfolge] 'kann nicht zugeordnet werden - es ist schreibgeschützt.

wie kann ich tun? Danke

+0

'HttpCookie cookie = neuer HttpCookie (" Warenkorb "); cookie.Value = Einkaufswagen; Response.Cookies.Add (cookie); ' –

+0

@StephenMuecke Nun, ich denke nicht, dass es seit der Ausgabe Duplikat, die Benutzer versuchen, es ein bisschen anders zu lösen und tatsächlich lösen diese durch Cookie ist eine schlechte Möglichkeit zu tun –

+0

@VolodymyrBilyachat, der Betrogene löst beide Ausnahmen in der Frage von OP (und ich stimme seiner schlechten Idee zu) –

Antwort

3

Zunächst können Sie nicht Objekt in Cookie speichern, müssen Sie es serialisieren seit Cookie akzeptieren Zeichenfolge. Der einfachste Weg Json.Net package

Response.Cookies.Add(new HttpCookie("cart", JsonConvert.SerializeObject(cart))); 

dann zu installieren wäre Warenkorb zu erhalten Sie

var cart = JsonConvert.DeserializeObject<List<Item>>(Request.Cookies["cart"]) 

Aber das Problem mit Cookies verwenden können, ist, dass sie are limited

Mein Vorschlag wäre es, Guid.NewGuid() als Einkaufswagen-ID in Cookies zu speichern und dann Ihren Einkaufswagen in der Datenbank mit dieser ID zu speichern.