2017-03-22 25 views
0

買い物リストアイテムをクッキーに保存する必要があります。 私は各製品にクッキーに追加する必要がある「追加」ボタンがある製品ページを持っています。 私は問題に遭遇しました。私はクッキーに1つの製品しか保存できないことに気付きました。ユーザが第2の製品をバスケットに追加したい場合、第1の製品は新しく追加された製品で上書きされる。オブジェクトを含むリストをクッキーに格納する方法MVC C#

私はネット上で私を助けることができる解決策を見つけられませんでした。私の質問は次のとおりです。クッキーにオブジェクトのリストを保存することができます。

私はこの方法を試してみました:

string myObjectJson = new JavaScriptSerializer().Serialize(cartItem); 

var cookiea = new HttpCookie("myObjectKey", myObjectJson) 
{ 
    Expires = DateTime.Now.AddYears(1) 
}; 

私はクッキーの値を必要とするとき、私はこの方法を得ることができます。それは動作します:

var tttt = new JavaScriptSerializer().Deserialize<ShoppingCartVM>(myObjectJson); 

どのようにクッキーがすでに項目が含まれている場合、私はクッキーは、オブジェクトのリストを格納しなければならなかった意味、同じクッキーに新しい項目を追加するために、問題を解決する、と私は必要なときに必要がありますそれは私にオブジェクトの全体のリストを返すのですか? 誰も私に助けてくれますか?前もって感謝します!

+0

リスト全体を保存してもよろしいですか?私はcartItem変数をシリアル化することができます。名前は実際には1つのアイテムだけを保存することを示しています。 – Tacud

+0

はい、そうです。コードの例では実際に1つの項目が保存されていますが、オブジェクトリストをクッキーに保存して、すでにいくつかの要素を含むクッキーに新しい項目を追加する方法が問題でした。私はリスト全体を保存する必要があります。これはショッピングリストでなければなりません。ユーザーが商品から追加ボタンを押すたびに、ショッピングリストに追加する必要があります。ユーザーがショッピングカートボタンを押すと、クッキーからリスト全体を取得する必要があります。 – Orsi

答えて

1

ショッピングカートの商品を保管するためにCookieを使用しないでください。この場合、セッションははるかに優れています。クッキーはクライアント側に保存され、セッションはサーバーに保存されます。クッキーを使用する場合、クライアントとサーバーの間でシリアル化されたショッピングカート全体を前後に送信する必要はありません。また、Cookieのサイズは限られており、Sessionでは複雑なオブジェクトを格納することができます。

は、ショッピングカートを保存(コントローラに)使用するには:

ShoppingCartVM cart; // create instance of the shopping cart 
this.Session["ShoppingCart"] = cart; 

値を取得するには、使用:

if (this.Session["ShoppingCart"] !== null) 
{ 
    ShoppingCartVM cart = (ShoppingCartVM)Session["NeededByDateTime"]; 
} 

あなたが永続的な何かが必要な場合。ユーザーが数ヶ月後でもカート内の商品を見つけられるようにする。ショッピングカートをデータベースに保存することを検討する必要があります。

+0

チップをありがとうございます。私はショッピングカートの商品を保管するためにセッションを使用すると思います。 – Orsi

関連する問題