Знакомство с ASP.NET 2.0 - Создание страницы
ОГЛАВЛЕНИЕ
Создание страницы
Использование шаблонов дизайна налагает свои требования на страницы. Поскольку шаблон содержит элементы управления ContentPlaceHolder, то страница должна содержать элементы управления Content, содержащие код разметки и другие элементы управления, которые будут отображать на результирующей странице. На странице не должно быть каких-либо серверных элементов управления или кода разметки вне элементов управления Content.
<%@ Page Language="C#" CodeFile="Default.aspx.cs"
Inherits="Default_aspx"MasterPageFile="MainMaster.master"%>
<asp:content runat="server" id="MyMenu" contentplaceholderID="PageMenu"><ul><li>
<a href="/Page1.aspx">Страница 1</a>
</li><li><a href="/Page2.aspx">Страница 2</a></li><li>
<a href="/Page3.aspx">Страница 3</a></li></ul></asp:content>
<asp:content runat="server" ID="MyContent" contentplaceholderID="PageContent">
<asp:TextBox id="txtName" runat="server">
</asp:TextBox>
<asp:Button id="btnShow" runat="server" Text="Показать"OnClick="btnShow_Click" /><br />
<asp:PlaceHolder ID="PlaceHolder" runat="server"></asp:PlaceHolder></asp:content>
Также как и в случае с шаблоном, код логики страницы создается обычным образом. Единственное отличие в том, что страница не имеет собственных объектов вроде 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("<script> alert('Добрый день, " + txtName.Text + "'); </script>"));
Master.Page.Header.Title = "Добрый день, " + txtName.Text;}
Для того чтобы привязать страницу к шаблону используется атрибут MasterPageFile директивы Page. Если же необходимо привязать один и тот же шаблон ко всем страницам в директории, то нет необходимости указывать атрибут MasterPageFile для каждой страницы, достаточно задать базовый шаблон в файле web.config.
<?xml version="1.0"?><configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<pages master="MainMaster.master" /></system.web></configuration>
Кроме того, 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 соответствий и не порождают дополнительных тегов, кроме своего содержимого.
<html><head id="ctl00_Head1"><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Домашняя страница</title></head><body><table width="100%"><tr><span id="ctl00_PageTitle">
</span></tr><tr><table width="100%"><tr><td><ul><li><a href="/Page1.aspx">Страница 1</a></li><li>
<a href="/Page2.aspx">Страница 2</a></li><li><a href="/Page3.aspx">Страница 3</a>\
</li></ul></td><td>
<form method="post" action="default.aspx" id="__aspnetForm"><div>
<input type="hidden" name="__VIEWSTATE" value="" />
</div><input name="ctl00$PageContent$txtName" type="text" id="ctl00_PageContent_txtName" />
<input type="submit" name="ctl00$PageContent$btnShow" value="Показать" \
id="ctl00_PageContent_btnShow" />
<br /></form></td></tr></table></tr><tr>\
<p align="right">Время: <span id="ctl00_PageTime">20.03.2005</span>
</p></tr></table></body></html>
Поскольку шаблон является подмножеством страницы, то допустимо создавать вложенные шаблоны, указывая для шаблона в директиве Master путь к другому шаблону с помощью атрибута MasterPageFile. Для этого необходимо в основном шаблоне определить элементы управления ContentPlaceHolder, а в «дочерних» шаблонах на ряду с ContentPlaceHolder элементами определить элементы управления Content для замещения содержимого элементов ContentPlaceHolder базового шаблона.
Использование разных шаблонов для разных браузеров
Любому Web-разработчику хорошо известно, что разные браузеры (например, Microsoft Internet Explorer, Netscape Navigator, Mozilla FireFox и др.) по разному обрабатывают HTML код и, что особенно важно, обладают несколько разными программируемыми моделями, что усложняет создание клиентских сценариев.
Для разрешения этой проблемы существует два основных метода, которые используются и в ASP.NET 1.x и в классическом ASP. Первый заключается в том, что браузеру клиента отправляется клиентский код, который, основываясь на типе и версии браузера, выполняет некоторые действия. Второй состоит в перенаправлении браузера пользователя на те страницы, которые специально оптимизированы под конкретный браузер. ASP.NET упрощает создание подобных страниц, поскольку среда выполнения генерирует HTML код для стандартных серверных элементов управления основываясь на информации о браузере клиента.При использовании шаблонов оформления, можно создать несколько шаблонов, для каждого браузера и в директиве Page страницы указать, какой шаблон использовать.
<%@ Page ie:MasterPageFile="ieMainTemplate.master"
opera:MasterPageFile="operaMainTemplate.master "
mozilla:MasterPageFile="mozillaMainTemplate.master " %>
Список браузеров и используемые средой ASP.NET свойства браузеров можно найти в директории %WINDIT%\Microsoft.NET\Framework\версия\CONFIG\Browsers.