私が書いたサイトで、コードを更新した直後にセッションに保存されているアイテムが突然認識されないという奇妙な問題が発生しています。Stackoverflow / google /などを検索したところ、他の人が同じ問題を抱えているのに、どこにも解決策が見つからないことがわかりました。
これが大まかに起こっていることです:
バスケットにアイテムを追加すると、セッションにアイテムが保存List<BasketItem>
されます。List<BasketItem>
次に、(BasketItemではなく)コードを更新すると、セッション変数はまだ存在しますが、.NETは、それが間違いなくそうであるとしても、それがそうであるとは思わないようです。
コードを変更した後でバスケットアイテムのリストを取得しようとInvalidCastException
すると、変換対象のタイプが異なっていても基本的には異なると言っているため、意味がありません。
例外は次のとおりです。
System.InvalidCastException:[A] System.Collections.Generic.List1
1[BasketItem] cannot be cast to [B]System.Collections.Generic.List
[BasketItem]。タイプAは、場所「C:\ Windows \ assembly \ GAC_64 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \mscorlib.dll」のコンテキスト「LoadNether」の「mscorlib、Version = 2.0.0.0、Culture = neutral、PublicKeyToken=b77a5c561934e089」に由来します。 。タイプBは、場所「C:\ Windows \ assembly \ GAC_64 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \mscorlib.dll」のコンテキスト「LoadNether」の「mscorlib、Version = 2.0.0.0、Culture = neutral、PublicKeyToken=b77a5c561934e089」に由来します。 。
セッション状態にStateServerを使用していて、それが役立つ場合はASP.NET3.5SP1を実行しています。
私が使用しているコードは以下のとおりです。
// for setting the basket
List<BasketItem> basketItems = new List<BasketItem>();
Session["basket"] = basketItems;
// for getting the basket
List<BasketItem> basketItems = (List<BasketItem>)Session["basket"];
今のところ、「キャストとして」を使用しているので、エラーは発生しませんが、コードが更新されたときにユーザーのバスケットが失われていることを意味します。
アドバイスをいただければ幸いです。
乾杯
ティム