セッションについて何か誤解しているに違いありません。いくつかの情報を保存しようとしているので、詳細を説明させてください。
ビジネス オブジェクトのリストを保持する「コンテナー」クラスを次に示します。このコンテナはセッションに保存されます。
public class MySessionContainer {
private IList<SomeBusinessObjectType> _BusinessObjectList = new List<SomeBusinessObjectType>();
public IList<SomeBusinessObjectType> BusinessObjectList {
get { return _BusinessObjectList; }
set { _BusinessObjectList = value; }
}
}
ウィザード/マルチステップ プロセスを形成する一連のページがあり、それらはすべて、セッション中のコンテナー内のビジネス オブジェクトのリストにアクセスする必要があります。
最初のページでは、ビジネス オブジェクトがセッションのリストに追加されるため、この種のコードを使用してそれを実現します。
string key = GetKeyForCurrentUser();
MySessionContainer container = (MySessionContainer) Session[key];
SomeBusinessObjectType businessObject = /* Get object from view. */;
container.BusinessObjectList.Add(businessObject);
生成されたキーは、すべてのページで常に同じです。
ただし、ユーザーが 2 番目のページに到達すると、コンテナーは期待どおりにセッションに入っていますが、ビジネス オブジェクトのリストは空であり、これは予期したことではありません。最初のページでビジネス オブジェクトを追加すると、2 ページ目以降のページにもそれが存在するはずです。
ASP.net のセッションについて理解していないことはありますか? コンテナがセッションにあるのにリストにないのはなぜですか? ASP.netがセッションから書き込み/読み取りを行うときに、リストはコンテナオブジェクトでシリアル化されていませんか?