Практическая часть
Задание 1. Запись данных в состояние отображения
В этом задании вы добавите пользовательские значения в объект ViewState и протестируете его, просматривая различные страницы.
Создайте веб-сайт ASPNET с именем ClientState на языке C# с помощью Visual Studio.
В новом проекте на страницу Default.aspx добавьте Label с именем Label1, кнопку Button1 и гиперссылку с именем HyperLink1. Присвойте свойству Hyperlink1.NavigateUrl значение Default2.aspx.
Создайте вторую веб-форму с именем Default2.aspx, добавьте к ней надпись с именем Label1, кнопку Button1 и гиперссылку HyperLink1. Присвойте свойству HyperLinkl.NavigateUrl значение Default.aspx.
В методы Page Load страниц Default.aspx и Default2.aspx добавьте код для записи текущего числа щелчков в объект ViewState и отображения этого значения в Label. Ниже приведен пример кода.
//C#
if (ViewState["clicks"] != null)
ViewState["clicks"] = (int)ViewState["clicks"] + 1;
else
ViewState["clicks"] = 1;
Label1.Text = " ViewState clicks: " + ((int)ViewState["clicks"]).ToString();
Соберите веб-сайт и откройте страницу Default.aspx. Щелкните несколько раз кнопку и убедитесь, что счетчик щелчков увеличивается.
Щелкните гиперссылку для загрузки страницы Default2.aspx. Обратите внимание, что счетчик вернулся к значению 1: значение, сохраненное в ViewState, потеряно, потому что открыта другая страница.
Щелкните гиперссылку для загрузки страницы Default.aspx — счетчик снова будет сброшен. При переключении между страницами теряется вся информация ViewState.
Задание 2. Сохранение данных в скрытых полях
В этом задании вы добавите элемент управления HiddenField и используете его для сохранения данных состояния.
Продолжите работу с проектом, созданным в предыдущем упражнении.
На страницу Default.aspx добавьте элемент управления HiddenField с именем HiddenField1.
В метод Page Load страницы Default.aspx добавьте код для записи числа щелчков в объект HiddenField1 и вывода этого значения в Label. Это демонстрирует следующий код:
//C#
protected void Page_Load(object sender, EventArgs e)
{
int clicks = 0;
int.TryParse(HiddenField1.Value, out clicks);
clicks++;
HiddenField1.Value = clicks.ToString();
Label1.Text = "HiddenField clicks: " + HiddenField1.Value;
}
Заметьте, что свойство HiddenField.Value имеет тип String, поэтому перед его установкой требуется преобразовать данные в тип String, из-за чего этот метод сохранения данных менее удобен, чем другие.
Соберите ваш веб-сайт и откройте страницу Default.aspx. Щелкните несколько раз кнопку и убедитесь, что счетчик щелчков увеличивается. При переходе на другую страницу значение HiddenField сбрасывается.
Просмотрите код страницы Default.aspx в вашем браузере. Обратите внимание, что значение скрытого поля отображается в виде обычного текста.
Задание 3. Хранение данных в Cookie
В этом задании вы используете cookie для отслеживания щелчков пользователя.
Продолжите работу с проектом, созданным в предыдущем упражнении.
В методе Page_Load страниц Default.aspx и Default2.aspx добавьте код, извлекающий текущее число щелчков из cookie с именем «clicks», увеличивающий значение и сохраняющий его в том же cookie. Число щелчков должно отображаться в элементе управления Label. Как это делается, показано в следующем примере кода:
//С#
protected void Page_Load(object sender, EventArgs e)
{
// Получить значение из cookie
int cookieClicks;
if (Request.Cookies["clicks"] != null)
cookieClicks = int.Parse(Request.Cookies["clicks"].Value)+ 1;
else
cookieClicks = 1;
// Задать cookie для следующего визита
Response.Cookies["clicks"].Value = cookieClicks.ToString();
Label1.Text = "Cookie clicks: " + cookieClicks.ToString();
}
Соберите ваш веб-сайт и посетите страницу Default.aspx. Щелкните несколько раз кнопку и убедитесь, что счетчик щелчков увеличивается.
Щелкните ссылку, ведущую на страницу Default2.aspx. Заметьте, что счетчик не сбросился. С помощью cookie можно просматривать любые страницы на этом веб-сайте, получая доступ к одним и тем же значениям.
Задание 4. Хранение данных в строке запроса
В этом задании вы используете строку запроса для отслеживания щелчков пользователя.
Продолжите работу с проектом, созданным в предыдущем упражнении.
В метод Page Load страниц Default.aspx и Default2.aspx добавьте код, извлекающий текущее число щелчков из параметра «clicks» строки запроса, увеличивающий это значение и сохраняющий новое значение в Hyperlink1.NavigateUrl. Число щелчков должно отображаться в элементе управления Label. Готовый код выглядит примерно так:
//C#
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Получить значение из строки запроса
int queryClicks;
if (Request.QueryString["clicks"] != null)
{
queryClicks = int.Parse(Request.QueryString["clicks"]) + 1;
}
else
{
queryClicks = 1;
}
// Задать строку запроса для гиперссылки
HyperLink1.NavigateUrl += "?clicks=" + queryClicks.ToString();
Label1.Text = "Query clicks: " + queryClicks.ToString();
}
}
Соберите веб-сайт, откройте страницу Default.aspx и щелкните гиперссылку для загрузки Default2.aspx. Обратите внимание на увеличение значения счетчика.
Несколько раз щелкните ссылки для перехода между страницами. Заметьте, что в состав URL включено число щелчков — эта информация не скрыта от пользователя.
Если в адресной строке браузера вручную изменить значение кликов в 100, и нажать Enter, то ASP.NET увеличит значение кликов в 101.
Если в адресной строке браузера вручную изменить значение кликов в Hello, и нажать Enter, то ASP.NET выдает ошибку, демонстрируя, что нечисловых значения никогда не будут успешно обработаны.
Если пользователь создаст закладку и позже вернется по ней на страницу или даже откроет ее на другом компьютере, значение счетчика щелчков сохранится. Кроме того, с помощью строк запроса можно отправлять электронную почту, создавать закладки для веб-страниц и сохранять состояние в URL. Соответствующую строку запроса необходимо включать во все ссылки на данной странице, иначе при переходе информация о состоянии будет потеряна.
Задание 5. Хранение данных в объекте Application
В этом задании вы добавите пользовательское значение в объект Application и протестируете работу браузера при просмотре различных страниц.
В Visual Studio создайте веб-сайт ASP.NET ServerState на языке С#.
В новом проекте на странице Default.aspx разместите следующие элементы управления: надписи Label1 и Label2, а затем ссылку HyperLink1. Присвойте свойству Hyper Link1. NavigateUrl значение Default2.aspx.
Создайте вторую веб-форму Default2.aspx, добавьте на нее надписи Label1, Label2 и ссылку HyperLink1. Присвойте свойству HyperLink1.NavigateUrl значение Default.aspx.
Добавьте в проект файл Global.asax.
В файле Global.asax откройте метод Application_Start и напишите код, инициализирующий переменную типа Integer с именем clicks в объекте Application, как показано в следующем примере:
//C#
void Application_Start(object sender, EventArgs e)
{
// Код, исполняемый при запуске приложения
Application["clicks"] = 0;
}
В метод Page_Load страниц Default.aspx и Default2.aspx добавьте код для подсчета щелчков в объекте Application. Не забывайте блокировать объект Application перед обновлением значения. Покажите значение в Label1. Вот как выглядит готовый код:
//C#
Application.Lock();
Application["clicks"] = ((int)Application["clicks"]) + 1;
Application.UnLock();
Label1.Text = string.Format("Application clicks: {0}", Application["clicks"].ToString());
Создайте веб-сайт и посетите страницу Default.aspx. Щелкните ссылку несколько раз для перехода между страницами, убедитесь, что счетчик щелчков увеличивает значение.
Откройте эту страницу в другом окне браузера. Обратите внимание, что счетчик учитывает щелчки, сделанные в первом окне, потому что объект Application является общим для всех пользовательских сеансов.
Перезапустите ваше веб-приложение и снова откройте эту страницу. Обратите внимание, что щелчок обнулился, поскольку объект Application не сохраняется при перезапуске приложения.
Задание 6. Хранение данных в объекте Session
В этом задании вы добавите пользовательские значения в объект Session и протестируете работу браузера при просмотре различных страниц.
Продолжите работу с созданным в предыдущем примере проектом.
В файле Global.asax добавьте к методу Session_Start код, инициализирующий переменную типа Integer с именем clicks в объекте Session, как показано в следующем примере:
//C#
void Session_Start(object sender, EventArgs e)
{
Session["session_clicks"] = 0;
}
В метод Page_Load страниц Default.aspx и Default2.aspx добавьте код для подсчета щелчков в объекте Session. Не забывайте блокировать объект Application перед обновлением значения. Напишите код для вывода значения в Label2. Готовый код выглядит примерно так:
//C#
protected void Page_Load(object sender, EventArgs e)
{
Application.Lock();
Application["clicks"] = ((int)Application["clicks"]) + 1;
Application.UnLock();
Label1.Text = string.Format("Application clicks: {0}", Application["clicks"].ToString());
Session["session_clicks"] = (int)Session["session_clicks"] + 1;
Label2.Text = string.Format("Session clicks: {0}", Session["session_clicks"].ToString());
}
Обратите внимание: тип HiddenField.Value — String, поэтому перед записью в такое свойство необходимо преобразовывать все данные в тип String. Это менее удобно, чем другие методы хранения данных.
Соберите веб-сайт и откройте страницу Default.aspx. Щелкните ссылку несколько раз для перехода между страницами, убедитесь, что значение счетчика щелчков как в Application, так и в Session увеличивается.
Откройте эту страницу в другом браузере. Обратите внимание, что счетчик в Application учитывает щелчки, сделанные в первом браузере, поскольку объект Application является общим для всех пользовательских сеансов. В Session, напротив, учитываются только щелчки, сделанные в одном браузере.
Перезапустите веб-сервер и снова откройте эту страницу. Заметьте, что оба счетчика обнулились, поскольку объекты Application и Session не сохраняются при перезаписи.
