Я установил объект сессии в одном соединении в моем коде:
Session("my_name") = "Dave"
Позже в моем коде я даю пользователю шанс обновить этот объект:
Session("my_name") = TextBox1.Text
Я перезагружаю свою страницу и отображаю немного привет оператор как это:
Label1.Text = "Hello" & CStr(Session("my_name"))
Результат: "Привет Dave" независимо от того, что я изменяю Сессию ("my_name") также.
Править: Вот полный код - позади я записал до продемонстрированного:
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.ExpiresAbsolute = DateTime.Now.AddMonths(-1)
If Page.IsPostBack = False Then
Session("my_name") = "Dave"
End If
Label1.Text = CStr(Session("my_name"))
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Session("my_name") = TextBox1.Text
End Sub
Класс конца
Событие Load
страницы
запускается раньше , чем событие щелчка кнопки
. Следовательно, во время его выполнения значение Session ("my_name")
все еще равно "Dave".
Если вы хотите настроить его правильно, вы должны либо поместить Label1.Text = CStr (Session ("my_name"))
в обработчик событий PreRender
твоя страница.
Вы разрезали и поместили его в событие Click
кнопки Button
(конечно, после установки значения сеанса), но я предполагаю, что вы захотите использовать сеанс позже для хранения предметов для менее тривиальных целей.
(Я полагаю, что позже вы захотите использовать сеанс для более сложных целей. В конце концов, какой смысл использовать сеанс, если вы хотите изменить только текст метки?)
По сути, вот что вы хотите:
Вот что происходит с вашим текущим кодом:
Вы можете узнать больше о теме здесь: Обзор жизненного цикла страницы ASP.NET .
Page.Load
запускается до вашего Button1_Click
- таким образом, вы устанавливаете значение своего текстового поля на то, что у вас есть в сеансе, а затем немного позже берете содержимое этого текстового поля (которое вы уже перезаписали) и возвращаете его в сеанс.
Вы неправильно устанавливаете значение по умолчанию для переменной сеанса . Обычно вы устанавливаете для переменной сеанса значение «Дэйв» при каждой загрузке страницы, что не является обратной передачей. Это даже включает обратные вызовы и перезагрузку страницы.
Чтобы установить сеанс по умолчанию, попробуйте ...
if( String.IsNullOrEmpty(Session["my_name"]) )
{
Session["my_name"] = "Dave";
}
Теперь вы можете использовать переменную сеанса, не проверяя, является ли она частью Postback или Callback.