是时候学习一些基础知识了。
看下面的代码:
protected void Button1_Click(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”的引用。但是“a”在上述函数中具有本地范围,因此必须将“a”的值复制到会话中。发生在哪里?它是否在函数执行之前发生,因为在任何其他发生的地方(即页面卸载、验证、渲染)列表“a”将不可用。那么,分配或引用的值何时何地存储在会话中?