Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 668
Эндрю Троелсен
// Добавление/чтение сеансовой переменной для данного пользователя.
Session["DesiredCarColor"] = "зеленый";
String color = (string)Session["DesiredCarColor"];
Производный от HttpApplication тип позволяет выполнить перехват событий начала и завершения сеанса с помощью обработчиков событий Session_Start() и Session_End(). В пределах Session_Start() вы можете создать любые элементы данных пользователя, а в Session_End() можно выполнить любые действия, необходимые при завершения сеанса пользователя.
‹%@ Application Language="C#" %
‹script runat="server"›
…
void Session_Start(objecl sender, EventArgs e) {}
void Session_End(object sender, EventArgs e) {}
‹/script›
Подобно типу HttpApplicationState, тип HttpSessionState может содержать любой тип, производный от System.Object, включая пользовательские классы. Предположим, например, что у нас есть новое Web-приложение (SessionState), которое определяет вспомогательный класс с именем UserShoppingCart.
public class UserShoppingCart {
public string desiredCar;
public string desiredCarColor;
public float downPayment;
public bool isLessing;
public DateTime dateOfPickUp;
public override string ToString() {
return string.Format("Машина: {0}‹br›Цвет: {1}‹br›$ кредит: {2}‹br›" +
"Аренда: {3}‹br›Доставка: {4}",
desiredCar, desiredCarColor, downPayment, isLeasing,
dateOfPickUp.ToShortDateString());
}
}
В обработчике событий Session_Start() можно назначить каждому пользователю свой экземпляр класса UserShoppingCart.
void Session_Start(Object sender, EventArgs e) {
Session["UserShoppingCartInfo"] = new UserShoppingCart();
}
При просмотре ваших Web-страниц пользователем вы можете взять экземпляр UserShoppingCart и заполнить его поля данными соответствующего пользователя. Предположим, что у вас есть простая страница *.aspx с набором элементов ввода, соответствующих каждому полю типа UserShoppingCart, и кнопкой (Button), используемой для установки введенных значений (рис. 24.5).
Рис. 24.5. Графический интерфейс пользователя для приложения с сеансовыми данными
Серверный обработчик события Click действует весьма прямолинейно (считывает значения элементов TextBox и отображает поступающие значения в поле типа Label).
protected void btnSubmit_Click(object sender, EventArgs e) {
// Установка преференций текущего пользователя.
UserShoppingCart u = (UserShoppingCart)Session["UserShoppingCartInfo"];
u.DateOfPickUp = myCalendar.SelectedDate;
u.desiredCar = txtCarMake.Text;
u.desiredCarColor = txtCarColor.Text;
u.downPayment = float.Parse(txtDownPayment.Text);
u.isLeasing = chkisLeasing.Checked;
lblUserInfo.Text = u.ToString();