1

セッション配列内でユーザーが選択した数量とともに、ショッピング バスケットの商品コードを保存したいと考えています。

このデータを格納するのに最も簡単で最も適切なデータ型がわかりません。

自分のオブジェクトをセッションに保存できないという印象を受けましたか?

Product code, Quantity
CQAR/HINCACOC, 10
CAAA/VINNYMIN, 20

バスケットに入れられるように、値を再度引き出すことができるようにしたいと考えています。

試しList<Dictionary<string, int>>ArrayListみましたが、どちらも意図したとおりに機能していないようです。

4

5 に答える 5

3

オブジェクト (およびそのオブジェクトの依存関係) が としてマークされている限り、オブジェクトの独自のカスタム リストをセッションに保存できます[Serializable]。この場合、次のようになります。

[Serializable]
public class BasketItem
{
    public string ProductCode { get; set; }
    public int Quantity { get; set; }
}

次に、これらのオブジェクトのコレクションを作成して、セッションに保存します。List<BasketItem>

更新:セッションがインプロセス/メモリに保存されている場合は、正しいので、以下のコメントに基づいて明確にする必要[Serializable]はありません。ただし、オブジェクトがサイトとセッション ストア間でシリアル化/逆シリアル化される必要があるため、オブジェクトが状態サーバー/SQL データベースに格納されている場合は、必ず必要です。

于 2012-08-13T10:48:14.347 に答える
2

I get the impression that I can't just store my own object in a session.

なぜそのような印象を受けるのですか?独自のオブジェクトをセッションに保存できます。Web ファームが必要で、セッションをデータベースに保存している場合は、オブジェクトに[Serializable].

注文を追跡するために、別のプロパティをオブジェクトに追加できます。私は次のようなことを提案します:

[Serializable]
public class CartEntry
{
    public string ProductCode { get; set; }
    public int Quantity { get; set; }
    public int Order { get; set; }
}
于 2012-08-13T10:45:55.163 に答える
1

BasketItems でリストを作成する

public class CartItem
{
   public int ProductID {get;set;}
   public int Quantity {get;set;}
}


List<CartItem> items = new List<CartItem>();
items.Add(new CartItem() { ProductID = 1, Quantity = 2 })


Session["cartItems"] = items;

to get it back again

if(Session["cartItems"] != null)
   List<CartItem> items = (List<CartItem>)Session["cartItems"];

製品 ID でアイテムを取得するには、以下を参照してください

int productId = 1;

var cartItem = (from ci in items where ci.ProductID == productId select ci).FirsOrDefault();
于 2012-08-13T10:44:08.593 に答える
0

SortedDictionaryオブジェクトを検討しましたか?ここでリファレンスを見つけてくださいhttp://msdn.microsoft.com/en-us/library/f7fta44c.aspx。余談ですが、InProcまたはASP.NET Session Managerサービスを使用していて、メモリ不足の問題が発生する可能性のある多くのアクセスを取得する場合は、Sessionを使用してこれを実行することをお勧めします。この構造をDBに移動するか、SQLServerを使用してSessionを実装することを検討してください。セッション状態モードの情報とSQLServer状態管理の構成方法については、こちらを確認してくださいhttp://msdn.microsoft.com/en-us/library/ms178586.aspx

于 2012-08-13T10:41:42.040 に答える
0

要件の解決策を説明する別のスレッドが stackoverflow にあります。

リストを ASP.NET のセッションに保存する

例を含むプロセス全体は、MSDN でも説明されています。

http://msdn.microsoft.com/en-us/library/ms178581.aspx

また、ArrayList オブジェクトを格納および復元する方法を示す例も作成しました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.Diagnostics;

public partial class SessionVarTest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
      string item01 = "Item 1";
      string item02 = "Item 2";

      ArrayList MyArrayIn = new ArrayList();

      MyArrayIn.Add(item01);
      MyArrayIn.Add(item02);

      Session["MyBasket"] = MyArrayIn;

      ArrayList MyArrayOut = (ArrayList)Session["MyBasket"];

      Debug.WriteLine("Content of ArrayList restored from session var");
      Debug.WriteLine("ArrayList item 1: " + MyArrayOut[0]);
      Debug.WriteLine("ArrayList item 2: " + MyArrayOut[1]);
    }
}
于 2012-08-13T10:54:02.137 に答える