Страница 9 из 11
Шаблоны дизайна страницЧто, прежде всего, отличает один 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 https-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; }} |