- •А.А. Волосевич
- •5.2. Веб-Приложение
- •5.3. Структура aspx-файла
- •1. Директивы страницы.
- •2. Серверные элементы управления и серверная форма.
- •5.4. Директивы страницы
- •5.5. Класс system.Web.Ui.Page
- •5.6. ЖИзненный цикл страницы
- •1. Подготовка страницы к выполнению
- •1.1. Событие PreInit
- •1.2. Событие Init
- •1.3. Событие InitComplete
- •1.4. Восстановление состояния представления
- •1.5. Обработка данных, принятых в результате возврата формы
- •1.6. Событие PreLoad
- •1.7. Событие Load
- •1.8. Обработка динамически созданных элементов управления
- •2. Обработка возврата формы
- •2.1. Обнаружение изменений в состоянии элементов управления
- •2.2. Обработка серверного события возврата формы
- •2.3. Событие LoadComplete
- •3.4. Генерирование разметки
- •3.5. Событие Unload
- •5.7. Общий обзор серверных элементов управления
- •5.8. Элементы управления html
- •5.9. Элементы управления web
- •5.10. Проверочные элементы управления
- •5.11. Эталонные страницы и темы
- •5.12. Некоторые приёмы работы со страницами
- •5.13. Связывание с данными
- •5.14. Списковые элементы управления
- •5.15. Элементы управления для Источников данных
- •5.16. Таблицы, связанные с данными
- •5.17. ОтоБражение отдельных записей
- •5.18. Конфигурирование веб-приложений
- •5.19. Инфраструктура обработки зАпроса
- •5.20. Веб-приложение и файл global.Asax
- •5.21. Модель поставщиков
- •5.22. Поддержка Сохранения Состояния
- •5.23. Кэширование в aSp.Net
- •5.24. Обеспечение безопасносТи в веб-приложениях
- •5.25. Управление членством и роЛями
- •5.26. Профили пользователя
- •5.27. Локализация и ресурсы
- •5.28. Пользовательские элементы управления
1.5. Обработка данных, принятых в результате возврата формы
На этом этапе обрабатываются все клиентские данные, содержащиеся в запросе HTTP, то есть содержимое всех полей ввода, определенных в тэге <form>. Обычно данные пересылаются в такой форме:
TextBox1=text&DropDownList1=selectedItem&Button1=Submit
Это разделенная символами & строка пар «имя=значение», которые загружаются в специальную коллекцию, предназначенную для внутреннего использования. Процессор страницы ищет соответствие между именами из полученной коллекции и идентификаторами элементов управления страницы. Найдя его, он проверяет, реализует ли соответствующий серверный элемент управления интерфейс IPostBackDataHandler. Если да, вызываются методы этого интерфейса, чтобы дать элементу управления возможность обновить свое состояние с использованием полученных данных. В частности, процессор страницы вызывает метод LoadPostData(). Если этот метод возвращает true, то состояние элемента управления обновлено, и последний добавляется в отдельную коллекцию для дальнейшей обработки.
Если имя полученного элемента данных не принадлежит ни одному из серверных элементов управления, он игнорируется и временно помещается в отдельную коллекцию для повторной попытки идентификации, которая будет предпринята позднее.
1.6. Событие PreLoad
Данное событие (введено в ASP.NET 2.0) указывает, что страница завершила этап инициализации системного уровня и переходит к тому этапу, на котором пользовательский код страницы имеет возможность сконфигурировать ее для дальнейшего выполнения и рендеринга. Это событие генерируется только для страниц.
1.7. Событие Load
Это событие генерируется сначала для страницы, а потом рекурсивно для всех её дочерних элементов управления. К этому моменту элементы управления, составляющие дерево страницы, уже созданы, и их состояние полностью восстановлено с учетом данных, полученных от клиента. Страница готова к выполнению инициализационного кода, связанного с её логикой и поведением. На этом этапе доступ к свойствам элемента управления и состоянию представления можно осуществлять без каких-либо опасений.
1.8. Обработка динамически созданных элементов управления
Когда все элементы управления страницы получили возможность завершить перед отображением свою инициализацию, процессор страницы предпринимает вторую попытку идентифицировать полученные от клиента значения, для которых не нашлось соответствий среди существующих элементов управления. Для этого он повторяет действия, описанные выше, в подразделе 1.5. Такое его поведение объясняется очень просто: процессор рассчитывает на то, что недостающие элементы управления могли быть созданы динамически.
Динамическое добавление элемента управления в дерево страницы может осуществляться, например, в ответ на определенное действие пользователя. Как уже упоминалось, после каждого возврата формы дерево страницы строится заново, так что информация о динамически созданных ранее элементах управления утрачивается. Однако на клиенте в момент возврата формы все динамически созданные элементы управления в ней присутствуют и заполнены данными, которые и получит сервер. Очевидно, что первоначально, то есть сразу после создания дерева страницы, полученным от клиента значениям динамических элементов управления не соответствуют никакие идентификаторы серверных элементов, но ASP.NET знает, что элементы управления могут создаваться в обработчике события Load. Вот потому-то и производится вторая попытка идентификации полученных значений как принадлежащих динамическим элементам управления.