ここで、リストをセッションに保存してから取得することに関する多くの投稿を見てきました。ほとんどの回答は、次の手法に従います。
if(Session["Strings"]==null)
{
//Create List
List<string> strings = new List<string>();
...
Session["Strings"] = strings;
}
else
strings = Session["Strings"] as List<string>
//Add item to list
strings.Add("asdf");
私はこれを試しましたが、リストを更新するとすぐにセッション変数も更新され、ポストバック時にセッションで更新された値を取得します。これは予想される動作ですか?セッションが更新されないようにこれを使用するにはどうすればよいですか? 使用後に「strings」変数をnullに設定しようとしましたが、セッションにはポストバックごとに追加されたアイテムがまだあります。
たぶん、説明する具体的なコードを追加できます。
私のページにボタンクリックイベントがあるとしましょう:
protected void GoClicked(object sender, EventArgs e)
{
List<string> a;
if(Session["data"] == null)
{
a = new List<string>();
a.Add("abc");
a.Add("def");
a.Add("ghi");
Session["data"] = a;
}
else
{
a = (Session["data"] as List<string>);
}
a.Add("jkl");
foreach (string s in a)
{
lblTest.Text += s + "<br />";
}
}
ボタンをクリックするたびに、「a」にはセッションからフェッチしていてローカル変数であるため、値が 4 つだけ含まれていると想定する必要があります。しかし、実際にはクリックするたびに値「jkl」が追加されるため、値の数は増え続けます。私はそれが起こることを望んでいません。私はより明確であることを願っています。