Экспресс-курс по ASP .NET. День третий

Привет всем.

Урок 3. Модель событий в ASP .NET 2.0, а также PostBack

----------------------<cut>----------------------

ASP .NET использует модель событий, очень похожую на модель событий Windows-приложений.
Это означает, что когда пользователь изменяет текст, или нажимает на кнопку, возникает соответствующее событие TextChange или ButtonClick.
Однако, в реальном времени, конечно же мы не сможем в Web-форме поймать событие нажатия клавиши на клавиатуре или движения мыши над картинкой и обработать это событие на сервере.
С чем же это связано? Все дело в том, что хоть событийная модель осталась та же, изменился способ оповещения приложения о данных событиях. Ведь ASP .NET – это в первую очередь серверная технология. Весь код приложения выполняется на сервере, тогда как в Windows-приложениях код выполняется на том же компьютере, на котором вызвано событие. В ASP .NET событие должно отправляться на сервер, чтобы его можно было обработать. И к тому же, все события обрабатываются за один проход, что создает дополнительные сложности.

Поэтому все работает по принципу:
1) обработка событий формы (см. ниже порядок выполнения событий)
1) форма отправляется к клиенту
2) клиент производит манипуляции с формой, вводит текст, отмечает галочки, в общем, изменяет содержимое элементов управления
3) клиент отправляет форму на сервер (это происходит всякий раз, когда активизируется элемент управления, требующий отправки формы на сервер, например, нажатие кнопки. Чтобы элемент отправлял форму на сервер, его свойство AutoPostBack должно быть установлено в true)
4) возвращаемся к пункту 1

Порядок выполнения событий таков:
1) Глобальные события приложения
2) События загрузки и инициализации формы и всех ее элементов
3) События элементов управления (например, нажатие кнопки)

Если вы заметили, я часто употребляю термин «форма отправляется на сервер». Это понятие технически называется postback (далее я именно так и буду его называть) и означает следующее: запрос странички на сервере методом POST, отправляющим сериализованные данные элементов странички и события, вызванные клиентом. Как раз во время анализа запроса ASP .NET проверяет, каким методом запрашивается страничка на сервере. Если использован метод POST, то поле IsPostBack класса Page принимает значение true.

Как видно, цикл жизни формы делится на 2 этапа (опущена стадия запроса странички у сервера):
1 этап:
1) форма создается, обрабатываются все события формы, а также код, созданный пользователем (например, конструктор класса Page), а также проверка (валидация) элементов управления (к этому понятию мы еще вернемся)
2) форма отправляется клиенту
3) форма уничтожается

2 этап:
1) клиент отправляет через postback форму на сервер
2) форма создается и присваивает элементам управления значения, установленные клиентом, а также параметры событий, вызванные на клиентской стороне (через технологию view state, если хотите знать, все данные сериализуются клиентом, отправляются на сервер методом HTTP Post, а затем — десериализуются).
3) обрабатываются все события формы, а также код, созданный пользователем (например, конструктор класса Page), ну и проверка (валидация).

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

Немного отступлю от темы – Как происходит AutoPostBack ?
Для любопытных будет интересно узнать, что механизм postback реализован в виде JavaScript функции, передаваемой в теле странички клиенту.
Обычно когда вы добавляете один или несколько элементов управления на страничку, у которых свойство AutoPostBack установлено в true, ASP .NET требуется знать, о каком элементе управления нужно отправлять информацию на сервер.
Для этого создается код:

<input type="hidden" name="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" value="" />

В этих полях содержится информация об идентификаторе (клиентском) элемента управления, вызвавшего Postback, ну и собственно параметры события.
Сама клиентская функция выглядит так:

<script language="javascript">
<!--
function __doPostBack(eventTarget, eventArgument) {
var theform = document.Form1;
theform.__EVENTTARGET.value = eventTarget;
theform.__EVENTARGUMENT.value = eventArgument;
theform.submit();
}
// -->
</script>

Эта функция соединяется с doPostBack путем присваивания onChange или onClick примерно так: <button onclick=”_doPostBack(‘buttonclick’,’’)”>.
Напомню, что это всего лишь пример, а в реальной жизни все намного сложнее…

Вот собственно и все на сегодня. В следующий раз мы поговорим о технологии view state.

Тэги:

Комментарии

    Нет комментариев
комментарии
^ Наверх