Книги, научные публикации Pages:     | 1 | 2 | 3 | 4 | 5 |

т Посвящается Тиму и Эрин Ч я живу благодаря людям, которых люблю. ...

-- [ Страница 3 ] --

Классы элементов управления ASP.NET Все сущности в Framework являются объектами. Ну ладно, немного преувеличил Ч не совсем все, так как типы значений, такие, как целые и по умолчанию объектами не явля ются. Однако вас не должен удивлять тот факт, что создаваемые вами компоненты будут так иначе производными от класса Object. На рис. 6-1 показана иерархия классов, которая являет ся основой любого компонента.

Пространство имен содержит класс Sys которому наследуют все серверные элемен ты управления. От два наибо лее важных пространства имен Ч и Пространство имен элементы управления, которые напрямую отображают в стандартные серверные элементы управления HTML (созда ваемые с помощью стандартного синтаксиса с добавле нием пары латрибут Ч значение Пространство имен WebControls включает все элементы управления ASP.NET, тэги которых в содержат например Создание компонентов Л Содержит серверные HTML-элементы Легенда Абстрактный класс Рис. Иерархия классов серверных элементов управления Примечание Если вы что мир станет если в эту иерархию добавить классы элементов управления Windows-форм, я хочу еще раз напомнить что, увы, мир разработчиков далек от совершенства. Достаточно один раз взгля нуть на класс чтобы тут же понять, насколько непохожи друг на друга две среды элементов управления и Windows.

на элементы управления Web не распро страняются такие понятия, как или описатели окон (window handles), в то же время на элементы управления Windows не распространя ются такие понятия, рендеринг (rendering) или со страницы (view state). Эти классы имеют между собой много общего, и безусловно, привычно иметь со многими свой ствами Web-элементов например Text.

Но это сходство не должно вводить вас в заблуж дение, поскольку и реализация, и назначение эле ментов управления в Web и Windows очень сильно разнятся.

202 Глава Хотя в пространства имен и включено большинство элементов управления, которые станут базовыми для ваших элементов, это не единственные пространства имен, которые можно взять за основу для построения элементов управ ления. Как видно на в этой иерархии два наиболее важ ных класса и Page базовым классом для всех Web-страниц в что хотя класс Page используется иначе, чем остальные классы элементов управле ния, в своей основе он похож на любой другой элемент ния. (Очень важно изучить элементы управления. Это понадобит ся даже тем программистам на Visual Basic, кто не создает элемен ты управления, а только использует их в повседневной работе.) Так же как и Page, в класса иногда используют по хожий на него класс Правда описывает не всю страницу, а ее часть. На странице разрешается размещать несколько объектов класса UserControI, а также вкла дывать их друг в друга.

В ранних бета-версиях ASP.NET поль зовательские элементы управления назывались pagelets. Это название мне нравилось больше, чем тем не менее UserControI - это окон чательное их название.

Жизненный цикл элемента управления Для осмысления работы всех элементов управления необходимо очень ясно понимать жизненный цикл элемента управления. В какой момент времени, например, восстанавливается состояние страницы (view state)? Что происходит раньше Ч событие Load или оповещение о событии отправки формы (postback)?

В таблице 6-1 показан жизненный цикл элемента управления ASP.NET (это немного модифицированная таблица из Изучая таблицу, не забывайте, что HTTP Ч это не под держивающий состояния. Введение понятия жизненного цикла должно создать видимость поддержки состояния формы и ее элементов. Изменяя жизненный цикл через события, можно со здать иллюзию состояния благо или во вред Ч это кому как нравится).

Создание компонентов ASP.NET Таблица 6-1. Жизненный цикл элемента управления ASP.NET Фаза Действия элемента Переопределяемый управления метод или событие Инициализация параметров, Событие необходимых на протяжении жизни Web запроса Определение способа восста- Метод LoadViewState страницы страни state) путем переопределения метода LoadViewState Обработка дан- Обработка данных Метод формы и обновление на сервер (На этом этапе участвуют только обрабатывающие отправлен ные на сервер данные. Чтобы обработать это событие, эле мент должен реа лизовывать интерфейс Загрузка Выполняются общие для всех Событие Load (метод запросов например открытие к данных. При событии Load создаются и инициализируют ся серверные элементы управ восстанавливается состояние, а в элементах управления формы отража ются изменения на стороне клиента Отправка уве- Инициируются события об Метод домлений об из- изменениях в на менении формы нение состояния между сервера щей и отправ ками формы. Как и этап Обработка данных, отправ ленных на сервер, этот этап имеет место только для эле ментов управления, реали зующих интерфейс (см. стр.) 204 Глава Таблица 6-1. (продолжение) Фаза Действия элемента Переопределяемый управления метод или Обработка со- Обработка события на сторо- Метод отправки не клиента, которое стало формы причиной отправки формы и инициирует соответствующие события на сервере. Как этап Обработка данных, отправ ленных на этот этап имеет место только для эле ментов реали зующих Подготовка Выполнение всех изменений, Событие к рендерингу которые необходимы для (метод рендеринга элемента управ Рендеринг элемента заклю в модификации HTML-страницы, содержа и отображаемой в браузере клиента. Изменения состоя внесенные на этом этапе, в отличие от изменений, сделанных на этапе рендеринга Сохранение Сохранение текущего Метод состояния тояния элемента управления.

По этого этапа свойство элемента хранится в стро ковом которые от правляется на клиент как скрытое поле HTML-страницы в браузере клиента. Путем переопределения метода SaveViewState элемент управ ления иногда для изменения свойства например для создания более эффективного состояния страницы Создание компонентов Таблица (продолжение) Фаза Действия элемента Переопределяемый управления метод или событие Рендеринг Создание выходных дан- Метод Render которые увидит клиент Ликвидация Выполняет финальную чист- Метод ку. Хотя луборщик мусора со самостоятельно освободит память от всех без ссылок, здесь можно выполнить обязатель ное освобождение дорого стоящих например подключений к базе данных Выгрузка Выполняется завершающая Событие Unload очистка перед уничтожением (метод элемента управления. Как правило, разработчики эле ментов предус матривают очистку в методе Dispose и не обрабатывают это событие При создании вам наверняка табли ца Если обнаруживается, что некое действие не ожидаемого эффекта, посмотрите, на каком этапе жизненного цикла компонента оно выполняется. В большинстве не поладка устраняется действия более подходяще му событию.

пользовательских элементов управления Я надеюсь, вы не забыли, как мы создавали Web-формы в гла ве 5, поэтому обсуждение элементов управления мы начнем с изучения похожего процесса создания производного от который мы разместим на тестовой странице.

Пользовательский элемент создают одним из двух способов. Первый и, пожалуй, наиболее состоит в сле дующем: формируется страница с атрибутами и элементами уп равления, которые в пользовательский элемент управления, а затем она преобразуется в пользовательский эле 206 Глава мент управления. Второй способ заключается з программном создании элемента управления, который затем тестируется на другой странице. Я предпочитаю создавать элемент как обычную Web-страницу, которую затем в элемент В любом случае, в результирующем с расширением.ascx, содержит ся либо код, либо атрибут Src со ссылкой на с производным от В ASCX-файле вместо ди рективы @ Page размещается директива @ Control.

Подготовка Web-страницы для преобразования в пользовательский элемент управления Наиболее способ проверки пользовательского элемен та управления заключается в преобразовании Web-страницы в пользовательский элемент управления, особенно это верно для ситуаций, когда от него требуется выполнения некоторых виальных задач. Например, многократного входа в систему на нескольких страницах. Для решения этой задачи я возьму про стую страницу входа в систему из главы 5 и немного ее изменю (листинг Import Security void EventArgs E) !

// Аутентификация эта страница // предоставляет доступ // только пользователю с // и if == { // // false);

' else = "Invalid Credentials: Please try again";

!

Создание компонентов ASP.NET

runat=server />

/> />
208 Глава />
Листинг Форма из листинга 5-1, подготовленная для преобразования в пользовательский элемент Этот листинг от листинга 5 небольшими косметичес кими изменениями: я добавил тэги чтобы ограничить ширину таблицы, и задал цвет фона в соответствии со на которую предполагается разместить элемент управления, а также немного изменил текстовые поля формы. В атрибуте задал размер текстовых а в атрибуте Ч максимальное число символов в текстовых полях.

Единственное существенное изменение Ч в функции if == Value == "password" { // // false);

Создание компонентов Поскольку здесь используется другой метод класса то, чтобы предотвратить переадресацию к стра нице, я получаю и игнорирую URL-адрес переадресации. Это не обходимо, так как обращения к Login Page за з возвращении пользователя со страницы входа G си стему, определенной в файле на запрошенную страницу, а если такой страницы нет, то к файлу default.aspx в том же приложении. Этот пользовательский элемент управления располагается на странице в качестве компонента, который контролирует доступ пользователя к системе, причем что пользователь остается на той же странице.

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

Примечание Вокруг cookie-файлов и возможного вторжения с их помощью в частную жизнь вателей до сих пор ведутся спо ры. Как вы ин хранящийся на клиентской машине. Су ществует два типа кратковремен ные, или сеансовые располагаются в памяти и существуют пока на клиентской машине открыт браузер, и долговременные, или постоянные (persistent), -- эти записываются на жесткий диск клиентской машины. Хороший тон требует спраши вать у пользователя разрешения на запись постоян ных cookie-файлов.

В результате работы создается страни ца, показанная на рис. 6-2.

Глава asp Рис. Вид готовой для преобразования в пользовательский элемент управления Преобразование Web-страницы в элемент управления Создаваемый нами пользовательский элемента управления дол жен располагаться сбоку, где обычно находится панель для пе ремещения по страницам. Страница на рис. 6-2 уже имеет необ ходимый нам вид: это сравнительно узкая пикселов в ши рину) компактная таблица. Чтобы преобразовать Web-страницу в пользовательский элемент управления, выполните последова тельность описанную далее.

1. Удалите со страницы тэги ,