我在这里看到了很多关于在会话中存储列表然后检索它们的帖子。大多数答案都遵循这种技术:
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");
我已经尝试过了,但是一旦更新列表,会话变量也会更新,并且在回发时,我会在 Session 中获得更新的值。这是预期的行为吗?如何使用它以使会话不更新?我什至尝试在使用后将“字符串”变量设置为空,但会话仍然在每个回发时添加了项目。
也许我可以添加一些具体的代码来解释。
假设我的页面上有一个按钮单击事件:
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 个值,因为我从 Session 中获取它并且它是一个局部变量。但实际上每次单击它时,都会添加值“jkl”,因此值的数量会不断增加。我不希望这种情况发生。我希望我更清楚。