Клас Page. Технологія поділу коду. Спрощена локалізація Web-додатків

Шаблони дизайну - це візуальне успадкування сторінок, що вперше з'явилося в ASP.NET 2.0. Ви можете створювати основу для будь-якої кількості сторінок програми. Шаблони дозволяють легше створювати та підтримувати програми. Visual Studio 2005 включає підтримку створення та редагування шаблонів сторінок. Ця лекція розглядає використання шаблонів сторінок у додатку та починається з пояснення їх переваг.

Примітка: термінологія у цій галузі не встояла. У деяких книгах використовують вираз «еталонні сторінки». Можна використовувати термін «головна сторінка», хоча його можна сплутати з Default.aspx.

Для чого потрібні шаблони дизайну сторінок?

Для простого користувача відмінність одного сайту від іншого – у різноманітному дизайні сторінок. Більшість веб-сайтів сьогодні мають відомий дизайн, який досягається використанням одних і тих же елементів у тих самих місцях у різних сторінках сайту. Тому дизайн сторінок є менш важливим, ніж загальна функціональність.

Наприклад, гляньте на головну сторінку сайту газети «Комсомольська правда». Щодня там з'являються різні статті, але оформлення їх залишається єдиним. Це логотип газети, верхні, праві, ліві навігаційні панелі, рейтинг статей праворуч, форми для пошуку, підписки та входу до пошти. Внизу сторінки є юридична інформація.

Деякі розробники копіюють і вставляють елементи, що повторюються, у всіх сторінках. Це неефективно, якщо потрібно змінити одну деталь у цих загальних елементах, зміни доведеться вводити у всіх сторінках. Можна поміщати повторювані шматки коду в файли, що включаються за допомогою команди HTML include. Але так важко побачити остаточний вигляд сторінки у середовищі розробки. В ASP.NET 1.1 стало можливим створювати елементи користувачауправління. Можна створити такий елемент із потрібним змістом та поміщати його на всі сторінки. Розвитком цієї ідеї стало створення шаблонів сторінок. Це також користувальницький елемент управління, тільки він знаходиться не в сторінці, а поза нею.

Основи Master Pages

За допомогою шаблонів сторінок ви визначаєте певний загальний зміст та поміщаєте її до сторінки з розширенням.master. Звичайно, таких сторінок у додатку може бути кілька. Цей шаблон можуть використовувати будь-яку кількість дочірніх сторінок, які, як і звичайні сторінки, мають розширення aspx.

Починаючи з цієї лекції, розбиратимемо проект, який Visual Studio 2005 створює за шаблоном Personal Web Site Starter Kit. У ньому показані шаблони сторінок, теми та персоналізація та навігація. Елементи навігації зосереджені на сторінці шаблону Default.master. І це природне рішення, оскільки навігація потрібна скрізь.

У сторінку шаблону також містяться загальні заголовки та нижні колонтитули.

Це єдиний тип сторінок, де можна розмістити спеціальні елементи керування ContentPlaceHolder. Вони визначають місця, де дочірні сторінки цього майстра можуть поміщати свій власний зміст. Коли ASP.NET отримує запит відобразити дочірню сторінку, вона зливає її код із кодом головної сторінки, в результаті генерується HTML, в якому не видно жодних швів.

Коли дочірня сторінкаредагується в середовищі розробки, на вкладці Design видно повну сторінку разом з елементами шаблону, але вони показані сірим кольором. Їх редагувати не можна. Можна редагувати те, що міститься в елементах Content.

У діалоговому вікні Add New Item виберіть тип сторінки Master Page. Як і звичайні сторінки, їх можна створювати з відокремленим кодом або кодом, вбудованим у сторінку. Це ніяк не впливає на модель розділення коду дочірніх сторінок. Крім того, головна та дочірня сторінки можуть розроблятися різними мовами.

Щоб отримати чіткий розділення сторінки на логічні частини, використовують таблиці. Побудуємо таблицю з 3 рядками, де в верхньому рядкузнаходиться заголовок всіх сторінок, у другому довільний зміст, вона складається з двох осередків, у кожній з яких по одному ContentPlaceHolder. У нижньому ряду є правова інформація. Таблиця створюється дуже просто з меню Layout-Insert Table. Створіть таблицю 2 на 3. Після цього об'єднайте комірки верхньої та нижній рядків, а в середній вставте ContentPlaceHolder. Створіть зміст заголовка та підвалу. Повинна вийти подібна сторінка:

Вітання!
Школа програмування ASP.NET 2.0
Copyright © 2006 - Школа ASP.NET 2.0

Перша відмінність цієї сторінки від звичайної полягає в тому, що вона починається з директиви Master, а не Page. Клас майстер-сторінки визначено у файлі MasterPage.master.cs.

public partial class MasterPage: System.Web.UI.MasterPage ( protected void Page_Load(object sender, EventArgs e) ( ) )

Клас шаблону - спадкоємець System.Web.UI.MasterPage, який у свою чергу успадковує від System.Web.UI.UserControl.

У ній можуть бути будь-які елементи керування та HTML-код. У ній можуть бути оброблені і події сторінки. 2 елементи ContentPlaceHolder позначають місця, куди вставляється зміст сторінки-спадкоємиці.

Тепер потрібно створити сторінку змісту. Вона створюється як завжди, тільки відзначається прапорець з написом Select Master Page. З'являється діалог, у якому потрібно вибрати шаблон сторінки.

Але і в цьому випадку призначення головної сторінки в директиві Page має пріоритет над призначенням на рівні програми. Встановлення web.config діє на сторінках, у яких masterPageFile не вказаний, але визначені елементи керування Content. Ця установка не діє на звичайні aspx-сторінки.

Шаблон можна призначити не всім сторінкам, а вибірково, наприклад, розташованим у певній папці програми.

Елемент location вставляється у головний вузол configuration. Тут зазначено, що всі сторінки з папки Lections використовують шаблонну сторінку Lections.master.

На сторінці-спадкоємиці шаблону можуть бути лише елементи типу Content, кожен з яких відповідає одному елементу ContentPlaceHolder шаблону. Не можна вставляти вміст за межами цих елементів, інакше ASP.NET не зможе об'єднати головну сторінку зі сторінкою змісту. Ідентифікатор ContentPlaceHolder повинен відповідати атрибуту ContentPlaceHolderID відповідного елемента Content.

Програма створила дочірню сторінку з двома елементами керування Content. Якщо перейти на вкладку Design, ці два елементи Content показані у вигляді порожніх прямокутників, розташованих поруч один з одним, оскільки в шаблоні вони знаходяться у двох сусідніх осередках таблиці. Директива Page відрізняється від звичайної, крім атрибута MasterPageFile, наявністю атрибута Title. Так як теги , , успадковуються з шаблону файлу, це єдина можливість перевизначити заголовок браузера. Замінимо значення атрибуту

Якщо подивитися на результуючу сторінку в браузері, побачимо, що заголовок браузера відобразив зміну. У HTML-коді сторінки записано

На самій сторінці відображається лише зміст, заданий у сторінці шаблону.

Шаблон можна в будь-який момент відредагувати, і зміни відіб'ються на всіх похідних сторінках. Наприклад, додамо картинку перед текстом заголовка.

(Її можна знайти в установці .NET "Microsoft.NET\Framework\v2.0.xxx\ASP.NETWebAdminFiles\Images)

Дочірня сторінка у браузері тепер виглядає так:

Є ще один спосіб змінити заголовок браузера програмно. Сторінка, що має шаблон, має властивість Master. Звичайно, воно є у всіх сторінок, але у звичайних сторінок воно дорівнює Null. Через нього можна звертатись до всіх властивостей головної сторінки. Ця властивість лише для читання.

На головній сторінці може бути визначений зміст, який відображатиметься за замовчуванням. Він міститься в елементах ContentPlaceHolder і успадковується всіма дочірніми сторінками. Якщо дочірня сторінка не перевизначить зміст за промовчанням, вона буде використовуватися для її відображення. Створимо елемент керування SiteMapPath, яким помістимо у ContentPlaceHolder1.

На сторінці MainSchool.aspx він не відображатиметься, оскільки в ній визначено обидва елементи Content. Однак якщо у наступній сторінцівизначено лише один із елементів Content:

Якій мові програмування Ви віддаєте перевагу?
asp:RadioButtonList ID="rblVoting" runat="server" DataSourceID="SqlDataSource1" DataTextField="variant" DataValueField="id">


Якщо подивитися її в браузері, побачимо, що в її лівій частині. хлібні крихти» відображаються.

Програмне призначення майстер сторінки

На сторінці змісту можна перепризначити її головну сторінку програмно. Для цього потрібно надати потрібне значення властивості Page.MasterPageFile. Шаблон зміниться незалежно від того, який шаблон був призначений у директиві @page. Але якщо спробуєте зробити це у функціях Page_Load або Page_Init, отримайте помилку часу виконання.

Цю властивість можна змінити лише під час обробки події Page_PreInit. Page_PreInit - сама рання фаза життєвого циклу сторінки, до якої можна отримати доступ. Під час події Init головна та дочірня сторінка вже зливаються в одну, тому вже пізно змінювати шаблон. З цієї причини подія Page_PreInit єдина, в обробнику якої можна працювати з головною сторінкою окремо від сторінки змісту.

Сторінки шаблону можуть мати методи та властивості. Щоб можна було звертатися до них, потрібно використовувати директиву @MasterType. При цьому стає доступним клас сторінки шаблону дизайну через строго типізоване посилання. Атрибут TypeName задає ім'я типу, а VirtualPath шлях щодо кореневого каталогу веб-додатку до файлу шаблону.

Таким чином, сторінка дозволяє доступ ззовні до властивостей своїх елементів.

void Page_Load() ( Master.FooterText = "Це є custom footer"; AdRotator ad = (AdRotator)Master.FindControl("MyAdRotator"); if (ad != null) ( ad.BorderColor = System.Drawing.Color. Purple;ad.BorderWidth = 10;))
Вкладені майстер-сторінки

Шаблони дизайну можуть успадковувати інші шаблони. Наприклад, сайт складається з кількох розділів. Усі сторінки сайту мають спільні елементи і всі сторінки розділу мають інші спільні елементи. Сайт квіткового магазину складається з розділів багаторічних та однорічних кольорів. Для них створені шаблони, які успадковують загальний шаблон сайту.

Perrenials

Сторінка, що описує нарциси, знаходиться в розділі багаторічних кольорів і успадковує шаблон SectionPerrenials.

Daffodils bloom early in spring and welcome growing season.
Послідовність подій

Коли складена сторінка формується на сервері, відбуваються події та сторінки шаблону та сторінки змісту. Порядок цих подій корисно знати, якщо хочемо програмувати їх обробники.

Ініціалізація вкладених елементів керування головної сторінки.

Ініціалізація вкладених елементів керування сторінки змісту.

Ініціалізація найголовнішої сторінки.

Ініціалізація сторінки змісту.

Page_LoadComplete сторінки змісту

Подія LoadComplete була введена для того, щоб можна було звернутися зі сторінки змісту до елементів головної сторінки, створених у її Page_Load. Це не можна зробити в Page_Load сторінки змісту, оскільки вона завантажується до головної сторінки.

Сторінки шаблонів для конкретних платформ

У багатьох випадках програми розробляються для перегляду на різних видахконтейнерів. Це можуть бути різні браузериабо програми перегляду веб-сайтів на кишенькових комп'ютерах та мобільних телефонах.

Тому ASP.NET 2.0 дозволяє в атрибуті MasterPageFile директиви Page визначити різні сторінки шаблону для конкретних контейнерів.

Висновок

При створенні програм, у яких всі сторінки включають загальні заголовки, підвали та систему навігації, життя можуть полегшити шаблони дизайну. Їх легко застосовувати і їх можна змінювати будь-якої миті, оновлюючи при цьому всю програму.

ASP.NET master pages дозволить вам створювати значний посібник для pages in your application. На першій матерій сторінці встановлюються висхідний і терпкий і стандартний рух, що ви хочете для всіх сторінок (або групи сторінок) у вашому застосуванні. Ви можете створювати окремі контенти сторінок, які містять вміст, що ви хочете відтворити. Якщо користувачі потрібні вмісту сторінок, вони merge s master page to produce output that combines the layout of master page with content from the content page.

How Master Pages Work

Master pages actual consist of two pieces, master page itself and one or more content pages.

Master Pages

На master page є файл ASP.NET з extension .master (для прикладу, MySite.master) з визначеним рівнем, що може включати static text, HTML елементи, і серверні керування. Мастерова сторінка є встановлена ​​як особлива пряма інформація про те, що відправляється пряма сторінка, яка використовується для звичайних .aspx сторінок. Directive looks як following.

@ @ Master directive can contain best the same directives that a directive can contain. Для прикладу, наступні master-page безпосередньо включають назву code-behind file, і assigns a class name to master page.

У додатку до @ Master directive, master page also contains all of top-level HTML elements for a page, such as html, head, and form. Для прикладу, на мабільній сторінці ви можете використовувати HTML-таблицю для повідомлень, зображення електронної пошти для вашої компанії логотип, статевий текст для друкарського повідомлення, і керування серверами для створення стандартної навігації для вашого сайту. Ви можете використовувати будь-який HTML and any ASP.NET елементи є частиною вашої master page.

Replaceable Content Placeholders

У тому, щоб статистичним текстом і контролем, що буде відображатися на всіх сторінках, матерій сторінці також включають один або більше контролів. Ці місцяholder controls define regions, де replaceable вміст будез'явитися. В turn, replaceable content is defined in content pages. Після того, як ви визначили керування, master page might look like the following.

Master page title

Master page title

Content Pages

Ви визначите вміст для майстра сторінки" з місцезнаходженням керування за допомогою індивідуальних content pages, які є ASP.NET pages (.aspx files and, optionally, code-behind files), що є граничною матерою сторінки. в content page"s @ Page directive включаючи atribut, що вказує на master page to be used. Для прикладу, content page might have the following @ Page directive, which binds it to на Master1.master page.

На контентній сторінці, ви створюєте вміст при надходженні керування і maping them to controls на master page. Для прикладу, на master page might hav contente placeholders називається Main and Footer. У content page, you canстворіть два керування, один, що є mapped to the control Mainй інші mapped to control Footer, як показано на following figure.

Replacing placeholder content

У загальному, ця структура не впливає на те, як ви робите свою сторінку або програму їх. However, в деяких випадках, якщо ви налаштовуєте page-wide property на матерій page, це може позначитися на версії content page, тому що master page is closest parent for controls on the page. Для прикладу, якщо ви налаштовуєте власність на контентній сторінці на true, але натисніть саму особливість на false в матерій page, view state буде ефективно розв'язати, оскільки налаштувати на мастичну page буде прийняти priority.

Master Page and Content Page Paths

Якщо content page requested, його content merged with the master page, and page runs in the context of content page. Для прикладу, якщо ви отримуєте особливість об'єкта, якщо в content page code або в master page code, cestа представляє місце розташування content page.

Мастер page і content page не може бути в той самий проміжок. Як тривалий час буде відображено в content page"s @ Page directive resolves to a .master page, ASP.NET може merge the content і master pages в single rendered page.

Referencing External Resources

З вмісту сторінок і майстра сторінок можуть бути встановлені контрольні елементи і елементи, які відображають external resources. Для прикладу, як глибокий вміст зображень зображення, що відображають зображення файлів, або їх загальний вміст зображень, які становлять інші сторінки.

Контекст для merged content and master pages is that of the content page. Це може помітити, що ви особливі URL-адреси для ресурсів, так як зображення файлів і списку сторінок, в списках.

Server Controls

У серверах контролю на матерій сторінках, ASP.NET динамічно обмежує URL-адреси властивостей, що відображають external resources. Для прикладу, ви можете почати контроль за майстром сторінки і налаштувати її особливість до порівняння до master page. At run time, ASP.NET буде модифікувати URL з тим, що він буде відповідати правильно в контексті вмісту сторінок.

ASP.NET може змінити URL в наступних випадках:

    URL-адреса є property of an ASP.NET server control.

    Властивості є зареєстрованими міжнародно в режимі контролю як URL. (The property is marked with the attribute .) В практичних термінах, ASP.NET server control properties, що є спільним використанням для повідомлень external sources marked in this way.

Інші елементи

ASP.NET не може modify URLs on elements that are not server controls. Для прикладу, якщо ви використовуєте елемент електронної пошти на мабільній сторінці та націлійте її на src atribut to a URL, ASP.NET не буде змінювати URL. У тому випадку, URL-адреса буде resolved в контексті вмісту сторінок і створити URL-адресу.

У загальному випадку, коли працює з елементами на матерій сторінках, він є об'єднаним, що ви використовуєте сервер контролю, навіть для елементів, які не потребують серверного коду. Для прикладу, усвідомлюйте за допомогою елемента керування, використовуючи сервер контролю. Що, ASP.NET може resolve URLs коректно і ви можете здійснити maintenance issues, що велику причину, якщо ви збираєтеся master або content page.

Для більш детальної інформації про особливі шляхи для ASP.NET серверів контролю, довідка ASP.NET Web Site Paths .

Master Pages and Themes

Ви не можете безпосередньо використовувати ASP.NET theme to a master page. Якщо ви придбали цю тему до @ Master directive, на сторінці буде розрив error when it runs.

However, теми applied to master pages під цими circumstances:

    If a theme is defined in the content page. Master pages resolved в контексті content pages, so content page"s theme is applied to master page as well.

    Якщо в мережі є те, що configureted use theme by including theme definition in the element.

Scoping Master Pages

Ви можете призначити content pages to a master page at three levels:

    На сторінці рівня Ви можете використовувати сторінку прямо в будь-який вміст сторінок, щоб зробити її на master page, як в наступному коді.

    На application level Використовуйте налаштування в pages element of application"s configuration file (Web.config), ви можете зазначити, що всі ASP.NET pages (.aspx files) в application automatically bind to master page. element might look like the following.

    Якщо ви використовуєте цю стратегію, всі ASP.NET сторінки в application, що мають контрольи, що merged with specified master page. (If an ASP.NET page does no contain controls, the master page is not applied.)

    На рівні рівня Цей стратегії є як binding на application level, except, що ви можете встановити в Web.config файл в одному складі тільки. Master-page bindings apply to ASP.NET pages in that folder.

Привіт w3ii у HTML

Цей код показує приклад як HTML-сторінки:




Hello w3ii!


firstpage.htm », а також створити посилання на файл, як це: firstpage.htm

Привіт w3ii в ASP.NET

Найпростіший спосіб, щоб перетворити сторінку HTMLв ASP.NET сторінку, щоб скопіювати HTML файл у новий файл з .aspx розширення.

Цей код показує наш приклад як на сторінці ASP.NET:




Hello w3ii!


Якщо ви хочете спробувати це самостійно, зберегти код у файлі під назвою firstpage.aspx, а також створити посилання на файл, як це: firstpage.aspx

Як це працює?

Фундаментально сторінка з ASP.NET такий самий, як HTML-сторінки.

HTML сторінка має розширення.htm. Якщо браузер запитує сторінку HTML із сервера, сервер надсилає сторінку до браузера без будь-яких змін.

Сторінка ASP.NET має розширення aspx. Якщо браузер запитує сторінку ASP.NET, сервер обробляє будь-який виконуваний кодсторінки, до того як результат відправляється назад у браузер.

Сторінка ASP.NET вище, не містить будь-який виконуваний код, тому нічого не виконується. У наступних прикладах ми додамо код сторінки, що виконується, щоб продемонструвати різницю між статичною HTML-сторінками і динамічними. сторінками ASP.

Класичний ASP

Активні серверні сторінки (ASP) були навколо протягом кількох років. З ASP виконуваний код може бути розміщений всередині HTML-сторінок.

Попередні версії ASP (before ASP. NET) часто називають класичний ASP.

ASP.NET не повністю поєднає з класичним ASP, але більшість сторінок Класичного ASP працюватимуть нормально, як сторінки ASP.NET, лише з незначними змінами.

Якщо ви хочете дізнатися більше про класичний ASP, будь ласка, відвідайте наш ASP Підручник .

Динамічні сторінки у класичному ASP

Щоб продемонструвати, як ASP може відображати сторінки з динамічним вмістом, ми додали певний код (in red) у попередньому прикладі:




Hello w3ii!




Код усередині теги виконується на сервері.

Response.Write є ASP код для запису щось у вихідний HTML потік.

Now() є функцією повернення серверів поточної дати та часу.

Якщо ви хочете спробувати це самостійно, зберегти код у файлі під назвою "dynpage.asp", а також створити посилання на файл, як це: dynpage.asp

Динамічні сторінки в ASP .NET

Цей код відображає наш приклад, як на сторінці ASP.NET:




Hello w3ii!




Якщо ви хочете спробувати це самостійно, зберегти код у файлі під назвою dynpage.aspx, а також створити посилання на файл, як це: dynpage.aspx

ASP.NET проти класичного ASP

Попередні приклади не демонструють жодної різниці між ASP.NET і класичний ASP.

Як ви можете бачити з двох останніх прикладів немає різниці між цими двома сторінками ASP і ASP.NET.

У наступних розділах ви побачите, як серверні елементи керування ASP.NET зробити більш потужним, ніж класичний ASP.

Напевно, рідкісна співбесіда з ASP.NET не обходиться без питання про життєвий цикл сторінки в ASP.NET Web Forms (далі для стислості ASP.NET). Спробуємо розібратися у цьому питанні. Розділив тему на дві. У цій статті розберемо етапи життєвого циклу сторінки в ASP.NET.

Загальний план Життєвий цикл сторінки ASP.NET
  • отримання та обробка web-сервером IIS запиту до сторінки
  • подальша передача запиту середовищу виконання ASP.NET
  • середовище виконання:

    * завантажує клас сторінки, що викликається * встановлює властивості класу сторінки * вибудовує дерево елементів * заповнює властивості Request і Response * викликає метод ```IHttpHandler.ProcessRequest```

Етапи

Виділяється 8 основних етапів. Наочно це показує така схема

Етап Опис
Запит станиці Запит сторінки здійснюється на початок життєвого циклу сторінки. Користувач здійснює запит, середовище виконання ASP.NET встановлює, чи потрібно здійснити компіляцію сторінки та розпочати життєвий цикл, або можна видати сторінку з кешу як відповідь, не виконуючи сторінки.
Початок обробки На цьому етапі відбувається встановлення властивостей Response і Request та властивості UICulture. Також на цьому етапі встановлюється, чи була ця сторінка запитана в результаті postback і відповідним чином встановлюється властивість IsPostBack.
Ініціалізація сторінки До часу ініціалізації сторінки всі дочірні елементи керування вже створені і мають встановлений властивості UniqueID . У цей час до сторінки використовуються теми оформлення. Якщо сторінка викликана результаті postback, то дані, відправлені на сервер, ще завантажені у властивості елементів управління, цьому етапі.
Якщо сторінка викликана результаті postback, то цьому етапі встановлюються властивості елементів управління, виходячи з інформації про стан (ViewState і ControlState).
Валідація Викликається метод Validate() для всіх, хто знаходиться на сторінці валідаторів.
Обробка постбеку Викликаються обробники подій, якщо postback відбувся.
Рендеринг Зберігається інформація про стан, потім клас сторінки викликає відповідні методи дочірніх елементівуправління для генерації HTML уявлення та передачі його в Response.OutputStream.
Вивантаження Вивантаження відбувається після того, як створено HTML подання для всієї сторінки.

Сторінка 10 з 11

Створення сторінки

Використання шаблонів дизайну накладає свої вимоги на сторінки. Оскільки шаблон містить елементи керування ContentPlaceHolder, сторінка повинна містити елементи керування Content, які містять код розмітки та інші елементи керування, які відображатимуться на результуючій сторінці. На сторінці не повинно бути будь-яких серверних елементівкерування або коду розмітки поза елементами керування Content.

    Сторінка 1

  • Сторінка 2

  • Сторінка 3



Як і у випадку з шаблоном, код логіки сторінки створюється звичайним чином. Єдина відмінність у тому, що сторінка не має власних об'єктів типу HeadControl, тому потрібно використовувати посилання на сторінку шаблону через властивість Master.

Protected void Page_Load(object sender, EventArgs e)(

if (!Page.IsPostBack) Master.Page.Header.Title = "Домашня сторінка";}!}

protected void btnShow_Click(object sender, EventArgs e)( PlaceHolder.Controls.Add(

new LiteralControl(" alert("Доброго дня, " + txtName.Text + ""); "));

Master.Page.Header.Title = "Доброго дня," + txtName.Text;} !}

Щоб прив'язати сторінку до шаблону, використовується атрибут MasterPageFile директиви Page. Якщо ж необхідно прив'язати один і той же шаблон до всіх сторінок директорії, то немає необхідності вказувати атрибут MasterPageFile для кожної сторінки, достатньо задати базовий шаблон у файлі web.config.


Крім того, ASP.NET дозволяє встановлювати тему оформлення програмним чином. Як було сказано вище, завантаження та зв'язування із шаблоном оформлення відбувається під час підготовки сторінки до ініціалізації. Тому, якщо потрібно змінити шаблон оформлення сторінки, потрібно робити це в обробнику події PreInit.

Protected void Page_PreInit(object sender, EventArgs e)( Page.MasterPageFile = "AnotherMaster.master";)

Обробка шаблонів середовищем ASP.NET

Під час першого звернення до будь-якої сторінки, ASP.NET здійснює пошук та компіляцію збірок для всіх шаблонів у директорії. Ця операція займає деякий час, що залежить від кількості сторінок шаблонів у директорії, але виконується лише один раз. Тому, якщо в директорії присутні шаблони, що не використовуються, це не призводить до втрат продуктивності в процесі роботи програми, єдина незручність - додатковий час, а компіляцію непотрібних збірок для сторінок, що не використовуються.

При зверненні до aspx файлу сторінки із заданим шаблоном оформлення процес компіляції майже нічим не відрізняється від звичайного процесу компіляції сторінки, за винятком того, що створюється клас шаблону MasterPage, посилання на який доступне як Page.Master.

Потім сторінка проходить всі ті кроки, які описані вище в цій статті, в результаті чого генерується HTML-код, який відправляється клієнту. В отриманому браузером HTML коді вже не можна визначити, яка частина коду задана у шаблоні оформлення, а яка частина коду визначена на самій сторінці, оскільки елементи керування ContentPlaceHolder і Content не мають HTML-відповідей і не породжують додаткових тегів, крім свого вмісту.

Домашня сторінка

  • Сторінка 1
  • Сторінка 2

  • Сторінка 3\


\

Час: 20.03.2005

Оскільки шаблон є підмножиною сторінки, то можна створювати вкладені шаблони, вказуючи для шаблону в директиві Master шлях до іншого шаблону за допомогою атрибута MasterPageFile. Для цього необхідно в основному шаблоні визначити елементи керування ContentPlaceHolder, а в «дочірніх» шаблонах поруч із ContentPlaceHolder елементами визначити елементи керування Content для заміщення вмісту елементів ContentPlaceHolder базового шаблону.

Використання різних шаблонів для різних браузерів

Будь-якому Web-розробнику добре відомо, що різні браузери(наприклад, Microsoft Internet Explorer, Netscape Navigator, Mozilla FireFoxта ін) по-різному обробляють HTML код і, що особливо важливо, мають кілька різних програмованих моделей, що ускладнює створення клієнтських сценаріїв.

Для вирішення цієї проблеми існує два основних методи, які використовуються і в ASP.NET 1.x, і в класичному ASP. Перший полягає в тому, що браузеру клієнта відправляється клієнтський код, який, ґрунтуючись на типі та версії браузера, виконує деякі дії. Другий полягає в перенаправленні браузера користувача на сторінки, які спеціально оптимізовані під конкретний браузер. ASP.NET спрощує створення подібних сторінок, оскільки середовище виконання генерує HTML код для стандартних серверних елементів управління на основі інформації про браузер клієнта. При використанні шаблонів оформлення, можна створити кілька шаблонів, для кожного браузера та в директиві Page сторінкивказати, який шаблон використовувати.

Список браузерів і властивості браузерів, що використовуються середовищем ASP.NET, можна знайти в директорії %WINDIT%\Microsoft.NET\Framework\версія\CONFIG\Browsers.