Я видел много сообщений о хранении списков в сеансах, а затем их извлечении. Большинство ответов по этой технике:Сессия обновляется при обновлении связанной переменной.
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");
Я пробовал это, но как только я обновить список, переменная сеанса обновляется также и на постбэка я получаю обновленное значение в сессии. Это ожидаемое поведение? Как это сделать, чтобы сеанс не обновлялся? Я даже пытался установить переменную «string» в 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 />";
}
}
Каждый раз, когда я нажимаю кнопку, я должен ожидать «а» содержит только 4 значения, как я извлечения его из сессии и это локальная переменная. Но на самом деле каждый раз, когда я нажимаю на него, добавляется значение «jkl», поэтому количество значений увеличивается. Я не хочу, чтобы это произошло. Надеюсь, я более яснее.
Это использование In-Proc Session или Out-Proc? Интересно, случится ли это для Out-Proc? –