Знакомство с ASP.NET 2.0
Страница 9. Шаблоны дизайна страниц


Шаблоны дизайна страниц

Что, прежде всего, отличает один Web-сайт от другого? Для простого пользователя сети Интернет основное отличие заключается в разнообразном дизайне странице. Прежде чем встретится с функциональными возможностями Web-приложения, посетитель сайта оценивает, нравится ли ему внешний вид страниц. Поэтому дизайн страниц является едва ли менее важным, чем общая функциональность.
   Задача разработчика писать код, а задача художника-дизайнера заниматься внешним оформлением и версткой HTML кода страниц. При этом в большинстве случаев необходимо обеспечить возможность параллельной работы над кодом приложения и HTML шаблоном. С этим весьма успешно справлялась технология разделения кода программной логики и HTML кода страницы Code-Behind. Но, при этом, при работе над каждой страницей, разработчику приходится, так или иначе, сталкиваться с разметкой страницы.
Стоит заметить, что большинство современных Web-сайтов имеют сходный внешний вид всех страниц и каждая страница имеет общие элементы дизайна. В ASP.NET 1.x общие элементы дизайна страниц заключали в пользовательские элементы управления и включались в каждую страницу, либо, наоборот, страницы преобразовывали в элементы управления, используя одну страницу в качестве основы в которую загружали элементы управления в зависимости от строки URL.
   Подход в ASP.NET 2.0 близок ко второму из названных подходов, но заключает в себе существенные преимущества. Разработчику больше нет нужды преобразовывать страницы в пользовательские элементы управления, что существенно упрощает разработку и отладку. А также существенно упрощает работу дизайнера, поскольку его задача сводится лишь во включении нескольких ASP.NET элементов в код страницы-шаблона. Для более подробного сравнения технологии шаблоновASP.NET 2.0 с существующими ранее техниками использования шаблонов рекомендуется обратится кстатье Фрица Оньена.

Создание шаблона дизайна

Шаблон дизайна страниц (Master pages) представляет собой обычную ASP.NET страницу, обладающую несколькими дополнительными атрибутами и свойствами и содержащую один или несколько специальных элементов управления ContentPlaceHolder. Для того чтобы преобразовать обычную страницу в шаблон, достаточно заменить директиву Page на директиву Master.
После этого необходимо вставить в разметку страницы серверные элементы управления ContentPlaceHolder, в те части страницы, где будет размещаться информация, не относящаяся к общему дизайну.

<%@ Master Language="C#" CodeFile="MainMaster.master.cs"Inherits="MainMaster_master" %><html>
<head runat="server"> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Моя домашняя страница</title></head>
<body><table width="100%"> <tr> 
<span id="PageTitle" runat="server"></span> </tr> <tr>
<table width="100%">
<tr> 
<td>
<sp:contentplaceholder id="PageMenu"
runat="server"></asp:contentplaceholder> </td>
<td> <form runat="server"> 
<asp:contentplaceholder id="PageContent" runat="server">
</asp:contentplaceholder> 
</form> </td> </tr></table></tr><tr>
<p align="right">Время: <span id="PageTime" runat="server"></span></p></tr>
</table></body></html>

Также как и для обычной страницы, в файле программной логики можно работать с имеющимися элементами управления, создавать и добавлять новые, основываясь на параметрах запроса изменять страницу и ее поведение. Таким образом, можно вынести логику создания внешнего облика Web-приложения практически полностью в шаблон страницы.
   Элемент управления ContentPlaceHolder позволяет определить содержимое, которое будет использоваться в случае, если страница, использующая шаблон, не переопределит содержимое элемента управления.

<asp:contentplaceholder id="PageMenu" runat="server"><ul><li>
<a href="Default.aspx">Главная страница</a></li><li>
<a href="Contents.aspx">Оглавление</a></li></ul></asp:contentplaceholder>

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

protected void Page_Load(object sender, EventArgs e){
PageTime.InnerText = DateTime.Now.ToShortDateString();}
public string Title{ 
get { return PageTitle.InnerText; }
set { PageTitle.InnerText = value; }}
 
« Предыдущая статья   Следующая статья »