Опубликован: 25.09.2008 | Доступ: свободный | Студентов: 3223 / 516 | Оценка: 4.32 / 3.98 | Длительность: 18:50:00
ISBN: 978-5-94774-991-5
Лекция 4:

Основы Web-программирования с использованием ASP.NET

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >

Динамическое создание элементов управления

Иногда в процессе работы над приложением возникает необходимость создания динамического интерфейса. Это становится особенно актуальным в случае, когда интерфейс приложения должен меняться в зависимости от действий пользователя. В этом случае удобным инструментом реализации динамического интерфейса становится возможность динамического создания и отображения на странице элементов управления. Для создания элемента управления необходимо создать объект соответствующего класса, присвоить его атрибутам необходимые значения и добавить его к коллекции элементов управления страницы. При этом следует помнить о том, что поскольку в момент исполнения программного кода, создающего объект и добавляющего его к коллекции элементов управления, страница уже создана, добавление будет всегда происходить в конец коллекции. Это означает, что элемент будет добавляться после последнего элемента управления страницы.

Чтобы получить больший контроль над расположением динамически создаваемого элемента управления, можно воспользоваться специально предназначенным для этого элементом Placeholder. Данный элемент управления предназначен для размещения других элементов внутри себя и может быть расположен в любом месте страницы. При этом, если внутри Placeholder отсутствует содержимое, это никак не повлияет на содержимое страницы.

При использовании динамически создаваемых элементов управления необходимо помнить, что они существуют только до очередной обратной отсылки. Если после обратной отсылки динамически созданный элемент управления необходимо по-прежнему отображать на странице, нужно создавать элемент управления в обработчике события Page.Load. При создании элемента управления в обработчике события Page.Load ASP.NET использует любую информацию о состоянии вида по завершении этого обработчика события.

Чтобы иметь возможность программного взаимодействия с динамически созданным элементом управления, последнему необходимо присвоить уникальный идентификатор (ID), являющийся аналогом ID любого другого элемента управления. В дальнейшем этот идентификатор можно использовать для того, чтобы найти данный элемент управления в коллекции элементов управления страницы с помощью метода Page.FindControl() и использовать его в программном коде.

Проиллюстрируем все вышесказанное следующим примером. Предположим, необходимо в рассматриваемом выше примере ввести возможность ввода отчества по желанию пользователя. При этом нежелательно, чтобы поле для ввода отчества появлялось на экране, если пользователь включит соответствующий режим. Реализовать это можно следующим образом.

Разместим на форме элемент управления CheckBox и установим свойство AutoPostBack этого элемента равным True.

Разместим на форме элемент управления Placeholder. В результате этих действий страница в режиме дизайна будет выглядеть следующим образом ( рис. 4.7):

Отображение страницы примера в режиме дизайна

Рис. 4.7. Отображение страницы примера в режиме дизайна

Модифицируем исходный код нашего приложения. В обработчик события Page.Load добавим следующий код, создающий объекты типа Label и TextBox и добавляющий их к коллекции Controls элемента Placeholder:

if (CheckBox1.Checked)
{
  Label lblSName = new Label();
  lblSName.ID = "lbl_SName";
  lblSName.Text = "Отчество";
  PlaceHolder1.Controls.Add(lblSName);
  TextBox tbSName = new TextBox();
  tbSName.ID = "tb_SName";
  PlaceHolder1.Controls.Add(tbSName);
}

Внесем изменения в программный код обработчика события нажатия на кнопку "Отправить". Полный текст программного кода этого обработчика представлен ниже.

string sname=string.Empty;
TextBox tbSname=(TextBox)Page.FindControl("tb_SName");
if (tbSname!=null)
{
  sname = tbSname.Text;
}
lbl_Result.Text = "Здравствуйте, "+tb_FirstName.Text+"
 "+sname+" "+
  tb_LastName.Text+"! Добро пожаловать в приложение ASP.NET";
lbl_Result.ForeColor = Color.Red;

Из примера видно, что с помощью метода Page.FindControl происходит поиск элемента управления tb_SName. В случае, если он будет найден на странице, значение свойства Text данного элемента записывается в переменную sname, которая затем используется для вывода информации на экран.

Результат работы программы изображен на рис. 4.8.

Результат использования динамически созданного элемента управления

Рис. 4.8. Результат использования динамически созданного элемента управления

Динамически созданные элементы управления могут обрабатывать события. Для реализации этой возможности необходимо подключить обработчик события с помощью кода делегата в событии Page.Load. Т.к. все события элементов управления генерируются после Page.Load, подключение обработчика события динамического элемента управления за пределами Page.Load приведет к тому, что событие элемента управления обрабатываться не будет.

Чтобы подключить обработчик события изменения текста, в динамически созданном элементе управления необходимо выполнить следующие действия.

Добавить процедуру обработчика события:

protected void tb_SName_TextChanged(object sender, EventArgs e)
{

}

В событии Page.Load привязать этот обработчик к соответствующему событию элемента управления:

tbSName.TextChanged += new System.EventHandler
 (this.tb_SName_TextChanged);

Класс Page

Ранее было показано, что все элементы управления, из которых состоит Web-приложение, добавляются в контейнер, роль которого выполняет страница приложения. Страница отвечает за генерацию HTML-кода, передаваемого впоследствии клиенту. При этом, однако, каждый элемент управления отвечает за генерацию своей части HTML-кода, описывающего именно этот элемент внутри страницы. Можно сказать, что страница как бы руководит процессом создания страницы, заставляя каждый элемент управления генерировать свою часть кода. В ASP.NET любая страница является экземпляром класса Page .

Класс Page играет исключительно важную роль в ASP.NET, так как с помощью него осуществляется доступ к большому количеству объектов, используемых для управления страницами Web-приложения.

Ниже приводятся свойства и методы объекта Page.

Application Сохранение данных в переменных состояния приложения.
Cache Управление кэшированием откликов на сервере.
Controls Получение элементов управления страницы.
Request Чтение запросов и получение из текущего запроса объектов Browser, Cookies, Files, ClientCertificates.
Response Запись текста и данных в отклик, получение из текущего отклика объектов Cache, Cookies, Output.
Server Обработка запросов и откликов, вспомогательные методы кодирования и декодирования URL.
Session Сохранение элементов данных в переменных состояния сеанса.
Trace Включение и выключение трассировки, запись трассировочных событий в журнал.

Рассмотрим самые важные из них.

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >