Китай |
Управление Web-элементами в ASP.NET
Файлы к лабораторной работе Вы можете скачать здесь.
Web-элементы размещены на вкладке Standard панели Toolbox среды Visual Studio .NET. В дальнейшем будем их называть просто серверными Web-элементами, поскольку они разработаны специально для поддержки сервером ASP.NET страниц. По сравнению с серверными html-элементами, Web-элементы имеют больше функциональных возможностей высокого уровня и автоматически приспосабливаются к типу броузера клиента, посетившего страницу.
Когда клиент запрашивает какую-то определенную ASP.NET-страницу, сервер высылает ему код, который наилучшим образом подходит его броузеру. Разные броузеры получают разный код html, соответствующий их конфигурации. ASP.NET самостоятельно определяет тип броузера и выполняет соответствующую работу. Web-элементы существенно упрощают разработку и сопровождение Web-приложений.
Распознавание броузера
В мире существует множество различных типов броузеров, хотя наибольшее распространение имеют только два: Netscape Navigator и Microsoft Internet Explorer. Но разработчик должен стремиться к возможности корректного отображения его страницы на наибольшем количестве броузеров. Простой html-код не дает таких возможностей.
Но при разработке Web-страниц на ASP.NET с использованием Web-элементов конкретный код html, который в дальнейшем должен считываться и распознаваться броузером, не создается. Вместо этого разрабатывается ASP.NET-код для выполнения сервером, а уж дальше сервер сам распознает тип и версию броузера по его запросу и будет генерировать наиболее подходящий для этого конкретного броузера html-код.
Это позволяет без всяких дополнительных усилий со стороны программиста разрабатывать полнофункциональные и гибко отображаемые на различных броузерах Web-страницы. Теперь разработчики могут создавать страницы с расчетом их отображения на самых полнофункциональных броузерах и включать туда такие функциональные возможности, которые они всегда хотели включить, но не делали этого во избежании конфликтов с более старыми версиями броузеров.
Сравнение html-элементов и Web-элементов
Какие элементы применять в каждом конкретном случае - зависит от функциональных возможностей, которыми должна обладать страница. Совсем не обязательно выбирать на одной странице какой-то один тип элементов управления. На одной и той же странице и в одном и том же приложении можно разместить как те, так и другие типы элементов.
При помещении Web-элемента управления на страницу создается элемент управления для сервера, а не для клиента. Сервер принимает этот элемент управления и генерирует соответствующий html-код на основе функциональных возможностей самого элемента управления. В html-представлении ASP.NET страницы каждый Web-элемент управления описывается открывающим и закрывающим дескриптором с префиксом asp:, например, для Web-элемента Label это может выглядеть так
<asp:Label [attributes]>Hello World!</asp:Label>
Еще одним важным различием между html-элементами и Web-элементами управления является то, что дескрипторы последних представляют именно сам элемент как информацию только для сервера, а не html-код, как в первом случает. Это значит, что попади такой код в броузер, он бы не был им распознан.
Web-элементы и их программирование
Наконец-то Web-страницы со сложной функциональностью можно программировать в том же стиле, как это делается при создании локальных Windows-приложений с использованием компонентов. При помещении Web-компонента на Web-форму оболочка автоматически генерирует в нем атрибут runat="server". Это означает, что элемент и сопутствующий ему код обязательно будут обработаны сервером.
Все элементы управления вкладки Standard поддерживаются классами, размещенными в простанстве имен System.Web.UI.WebControls. Они произведены от общего класса WebControl, а значит наследуют все его свойства и методы. Сам же класс WebControl наследует, в свою очередь, от класса Control. В таблице перечислены все элементы управления, содержащиеся во вкладке Standard панели Toolbox.
Этапы взаимодействия броузера и сервера в ASP.NET
Рассмотрим механизм работы ASP.NET по шагам на примере простой формы с текстовым полем и кнопкой типа submit, при нажатии на которую должно быть сгенерировано привествие.
- Пользователь запрашивает Web-страницу .aspx посредством броузера, набрав ее URL
- При поступлении запроса на сервер среда выполнения ASP.NET запускает приложение, если оно до этого не было запущено запросами других пользователей, и загружает предварительно скомпилированную сборку со страницей. Затем сборка окончательно компилируется JIT-компилятором ( just-in-time = " как раз вовремя ") в машинный код конкретной машины-сервера и подается на выполнение. Результатом выполнения является обычная страница на html-коде, которая отсылается Web-броузеру как отклик на запрос. В странице сгенерирован текст, поле ввода и кнопка submit, которые заключины в тег <form>...</form>
- Броузер интерпретирует html-код и отображает на экране простую форму <form>...</form> с элементами пользовательского интерфейса. Поскольку форма отображается впервые, текстовое поле еще не заполнено и приветствие отсутствует
- Пользователь вводит свое имя и щелкает по кнопке. Броузер распознает, что это была нажата кнопка submit (отправить). Форма по умолчанию использует метод "post" (отправить почтовое сообщение) и отправляет данные формы целевому файлу для обработки. Поскольку нами в теге <form> атрибут action указан не был, то целевой страницей для обработки будет считаться все тот же запрошенный ранее файл .aspx
- Теперь сервер вновь обрабатывает страницу. В этот раз событие было инициировано щелчком пользователя по кнопке и на сервере выполняется заготовленный нами обработчик события
- Для считывания имени, введенного пользоваателем в текстовое поле, в обработчике события нажатия кнопки применяется свойство Text серверного Web-элемента управления TextBox. Эта строка присоединяется к свойству Text элемента отображения Label, который мы заранее поместили на страницу
- Сервер снова генерирует стандартный html-код с учетом возможностей броузера и отсылает ему полный ответ на чистом html
- Броузер воспроизводит присланный ответ и на этот раз отображается также и приветствие
Состояние вида
Протокол передачи гипертекста HTTP не хранит информацию о сотоянии формы. При любом поступившем на сервер запросе страница загружается в память как в первый раз и устанавливается в начальное состояние. Но странице в текущем сеансе работы с пользователем может загружаться не впервые и иметь текущее состояние, отличное от начального.
Информация о сотоянии Web-формы называется состоянием представления или состоянием вида (view state). Среда исполнения ASP.NET, если ей указать, может автоматически сохранять состояние вида Web-формы либо на сервере, либо на клиенте. Такие возможности называются управлением сеансами или состоянием приложения. Для сохранения на клиенте состояние вида упаковывается в скрытые текстовые поля типа
<input type="hidden" name="__VIEWSTATE" value="......." />
Модель событий Web-форм
С точки зрения программиста, работа событий Web-форм и Windows-форм очень похожи. Но, по сути, события Web-форм сильно отличаются от событий Windows-форм. Самое существенное отличие состоит в том, что события Web-форм преимущественно инициируются клиентом, а обрабатываются сервером.
Представим себе форму, насыщенную Web-элементами управления. Пусть она содержит несколько текстовых полей, несколько списков, флажков, кнопок и т.д. Не каждое действие пользователя над элементами управления вызывает немедленное обращение к серверу. Более экономным считается подход, когда пользователь на стороне клиента переведет нужные ему интерфейсные элементы в определенное состояние, а затем по общей команде происходит отправка всех данных и событий на сервер.
Наибелее часто из событий автоматического обращения к серверу используется событие щелчка на кнопке. Другие события, например, выбор элемента из списка, установка или сброс флажка, не приводят к немедленному обращению к серверу (если только их свойство AutoPostBack не было установлено в True ). Такого рода события накапливаются в буфере броузера до тех пор, пока событие щелчка на кнопке не вызовет отправку сообщения на сервер вместе с накопленными событиями. Получив обратную отсылку, сервер распознает накопленные события, изменяющие состояние элементов формы, и обрабатывает их, причем последовательность обработки поступивших событий произвольная.
Обработка страницы
Страница совместно обрабатывается Web-сервером, средой выполнения ASP.NET и кодом фонового файла или кодом, включенным в страницу как сценарий. Наследуемый класс System.Web.UI.Page содержит ряд событий, методов и свойств, с помощью которых можно управлять обработкой страницы. В процессе стандартной обработки страницы на сервере происходит ряд событий уровня всей страницы.
События класса Page
- Init (Восстановление) - возникает при инициализации самой страницы как экземпляра класса Page. Информация о состоянии элементов управления еще отсутствует
- Load (Загрузка) - возникает при загрузке элементов управления на страницу. На данном этапе уже имеется информация о состоянии вида этих элементов управления
- PreRender (Предвизуализация) - возникает непосредственно перед воспроизведением (отображением) элементов управления в выходном потоке. Это событие можно использовать для начала генерации html-вывода собственными элементами управления
- Unload (Выгрузка) - возникает, когда элементы управления выгружаются из страницы, формирование выходного потока завершено и записывать в него свои собственные данные уже поздно
Свойства класса Page
- EnableViewState - указывает, разрешено ли сохранять состояния представлениям самой страницы и ее элементам управления. По умолчанию это свойство имеет значение true, т.е. сохранять состояния разрешено. Но можно управлять этим свойством.
- ErrorPage - указывает страницу, на которую будет перенаправлен броузер при возникновении непредвиденной исключительной ситуации.
- IsPostBack - указывает, загружается ли страница впервые или повторно в данном сеансе связи. Перед первой загрузкой равно false, после первой загрузки становиться равным true. Очень удобно применять для инициализации элементов управления в функции Page_Load().
- IsValid - указывает, была ли успешной проверка правильности страницы.
- Request (Запрос) - получает HTTP-объект Request, который предоставляет доступ к данным входных запросов, поступающих по протоколу передачи гипертекстовых файлов HTTP.
- Response (Ответ) - получает HTTP-объект Response, который отсылает запрошенные данные броузеру.
- Session (Сеанс) - получает текущий объект Session, в котором ASP.NET хранит состояние сеанса.
- Trace (Трассировка) - получает объект TraceContext страницы, в котором записана трассировочная информация.
Приступим к разработке демонстрационных страниц с использованием высокоразвитых Web-элементов из вкладки Standard панели Toolbox. Создадим проект с начальной страницей и далее будем добавлять к нему все новые страницы, на которых будем размещать те или иные Web-элементы управления.