Опубликован: 07.05.2010 | Доступ: свободный | Студентов: 1678 / 62 | Оценка: 4.56 / 4.06 | Длительность: 34:11:00
Лекция 5:

Применение серверных элементов управления

< Лекция 4 || Лекция 5: 12 || Лекция 6 >
Аннотация: Пример исследования жизненного цикла страницы. Перехват событий жизненного цикла страницы в обработчиках. Динамическое добавление элементов управления.

Серверные элементы управления можно добавлять к странице как декларативно, так и программно. Но нужно понимать жизненный цикл страницы. Код окна локального приложения Windows остается в памяти компьютера до тех пор, пока пользователь не закроет это окно. Web-страница загружается в память сервера при получении запроса от пользователя. Она анализирует поступившую информацию, генерирует необходимый код, отдает его HTTP и автоматически выгружается из памяти.

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

Пример исследования жизненного цикла страницы

Давайте на практике исследуем порядок генерации событий на протяжении жизненного цикла страницы. Названия событий можно получить даже из пустой .aspx -страницы, если включить трассировку в исполняющей среде ASP.NET.

  • Создайте в выбранном каталоге пустой проект Web-приложения LifeCycleEvents командой File/New/Web Site оболочки Visual Studio 2005
  • В панели Solution Explorer (или в меню Website ) вызовите контекстное меню для узла проекта и выполните команду Add New Item. Настройте диалоговое окно мастера так
    Обратите внимание, что мы добавляем страницу с отделенным кодом (включен флажок Place code in separate file ).
  • Запустите добавленную страницу на выполнение щелчком на кнопке Start Debugging.

    Появится окно с предупреждающим сообщением, что для режима отладки нужно создать конфигурационный файл Web.Config с параметром включения отладки


  • Щелкните на кнопке OK и оболочка создаст конфигурационный файл в корневом каталоге проекта

    Автоматически запустится встроенный броузер с пустым рендерингом.

  • Закройте броузер и вновь его запустите командой оболочки File/View in Browser (или одноименной командой контекстного для страницы меню)

    В строке адреса броузера будет примерно следующий текст

    http://localhost:1206/LifeCycleEvents/Default.aspx

  • Замените в строке адреса броузера блок Default.aspx на Trace.axd и пошлите запрос примерно с таким адресом

    http://localhost:1206/LifeCycleEvents/Trace.axd

    Сервер выдаст сообщение об ошибке с предложением внести в конфигурационный файл предлагаемый блок кода

    <configuration>
        <system.web>
            <trace enabled="true"/>
        </system.web>
    </configuration>
  • Скопируйте строку <trace enabled="true"/> параметра, включающего трассировку страниц приложения, и поместите ее в файл Web.Config проекта в секцию <system.web>, где уже находится параметр <compilation debug="true"/>, включающий отладку
  • Запустите приложение и в строке адреса броузера вновь введите вызов страницы Trace.axd

Появится страница трассировочных данных, в которой щелчком на гиперссылке View Details (показать подробности) мы получим распечатку трассировки нашей пустой страницы. В секции Trace Information приведен список событий, генерируемых страницей на разных этапах жизненного цикла

Trace Information
Category Message From First(s) From Last(s)
aspx.page Begin PreInit
aspx.page End PreInit 0,0175430117514936 0,017543
aspx.page Begin Init 0,0201478120822619 0,002605
aspx.page End Init 0,0376570206548598 0,017509
aspx.page Begin InitComplete 0,0381149000780825 0,000458
aspx.page End InitComplete 0,0400307860356554 0,001916
aspx.page Begin PreLoad 0,0420332751788286 0,002002
aspx.page End PreLoad 0,0433926658276401 0,001359
aspx.page Begin Load 0,043818976992886 0,000426
aspx.page End Load 0,0499175174498435 0,006099
aspx.page Begin LoadComplete 0,0503580762359462 0,000441
aspx.page End LoadComplete 0,0516912065639627 0,001333
aspx.page Begin PreRender 0,0525765146128907 0,000885
aspx.page End PreRender 0,0658033353401061 0,013227
aspx.page Begin PreRenderComplete 0,0682352086647884 0,002432
aspx.page End PreRenderComplete 0,0701589168455767 0,001924
aspx.page Begin SaveState 0,164382065318358 0,094223
aspx.page End SaveState 0,39629729476791 0,231915
aspx.page Begin SaveStateComplete 0,39674344085631 0,000446
aspx.page End SaveStateComplete 0,398069307691341 0,001326
aspx.page Begin Render 0,398760456985455 0,000691
aspx.page End Render 0,646856234521427 0,248096

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

< Лекция 4 || Лекция 5: 12 || Лекция 6 >