我在這裏看到很多關於在會話中存儲列表然後檢索它們的帖子。大部分的答案遵循這種技術:當鏈接變量更新時會話得到更新
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'值,因此值的數量不斷增加。我不希望發生這種情況。我希望我更清楚。
這是使用In-Proc Session還是Out-Proc?我想知道這是否會發生在Out-Proc? –