Поделиться через


Общие сведения о главных страницах ASP.NET

Обновлен: Ноябрь 2007

Главные страницы ASP.NET позволяют создавать последовательную структуру страниц в приложении. Одна главная страница определяет вид, наполнение и стандартное поведение для всех страниц (или группы страниц) приложения. Затем можно создавать отдельные страницы содержимого, включающие содержимое, которое необходимо отобразить. Когда пользователи запрашивают страницу содержимого, выходная страница представляет собой сочетание структуры главной страницы и содержимого со страницы содержимого.

Как функционируют главные страницы

Главные страницы состоят из двух частей: самой главной страницы и одной или нескольких страниц содержимого.

wtxbf3hh.alert_note(ru-ru,VS.90).gifПримечание.

Также можно выполнять вложение главных страниц. Дополнительные сведения см. в разделе Вложенные главные страницы ASP.NET.

Главные страницы

Главная страница представляет собой файл ASP.NET с расширением MASTER (например MySite.master) с предопределенной структурой, которая может включать статический текст, элементы HTML и серверные элементы управления. Главная страница идентифицируется по особой директиве @ Master, которая заменяет директиву @ Page, используемую для обычных страниц ASPX. Эта директива выглядит следующим образом:

<%@ Master Language="VB" %>
<%@ Master Language="C#" %>

Директива @ Master может содержать большинство директив, которые содержит директива @ Control. Например, следующая директива главной страницы включает имя файла с выделенным кодом и назначает имя класса главной странице:

<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %>
<%@ Master Language="C#" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

Кроме директивы @ Master, главная страница также содержит все элементы HTML верхнего уровня для страницы, такие как html, head и form. Например, в качестве структуры главной страницы можно использовать таблицу, элемент img для эмблемы компании, статический текст для уведомления об авторских правах и серверные элементы управления для создания стандартной системы переходов по веб-узлу. На главной странице можно использовать любые элементы HTML и ASP.NET.

Подстановочные элементы ContentPlaceholder

Кроме статического текста и элементов управления, используемых на всех страницах, главная страница содержит элементы управления ContentPlaceHolder. Эти элементы управления — "местозаполнители" определяют области, в которых будет отображаться заменяемое содержимое. Заменяемое содержимое, в свою очередь, определяется на страницах содержимого. После определения элементов управления ContentPlaceHolder главная страница может выглядеть следующим образом:

<% @ Master Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 
    1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server" >
    <title>Master page title</title>
</head>
<body>
    <form id="form1" runat="server">
        <table>
            <tr>
                <td><asp:contentplaceholder id="Main" runat="server" /></td>
                <td><asp:contentplaceholder id="Footer" runat="server" /></td>
            </tr>
        </table>
    </form>
</body>
</html>
<%@ Master Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 
    1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server" >
    <title>Master page title</title>
</head>
<body>
    <form id="form1" runat="server">
        <table>
           <tr>
               <td><asp:contentplaceholder id="Main" runat="server" /></td>
               <td><asp:contentplaceholder id="Footer" runat="server" /></td>
           </tr>
        </table>
    </form>
</body>
</html>

Страницы содержимого

Содержимое для элементов управления — "местозаполнителей" на главной странице определяется путем создания отдельных страниц содержимого, которыми являются страницы ASP.NET (ASPX-файлы и файлы с выделенным кодом), связанные с определенной главной страницей. Связывание осуществляется в директиве @ Page страницы содержимого путем включения атрибута MasterPageFile, указывающего на используемую главную страницу. Например, страница содержимого может иметь следующую директиву @ Page, связывающую ее со страницей Master1.master:

<%@ Page Language="VB" MasterPageFile="~/MasterPages/Master1.master" Title="Content Page" %>
<%@ Page Language="C#" MasterPageFile="~/MasterPages/Master1.master" Title="Content Page"%>

На странице содержимого содержимое создается путем добавления элементов управления Content и сопоставления их с элементами управления ContentPlaceHolder на главной странице. Например, главная страница может содержать "местозаполнители" содержимого Main и Footer. На странице содержимого можно создать два элемента управления Content: один сопоставляется с элементом управления ContentPlaceHolderMain, а второй — с элементом управления ContentPlaceHolderFooter, как показано ниже.

Замена содержимого "местозаполнителя"

График MasterPagesMerge

После создания элементов управления Content можно добавить в них текст и элементы управления. На странице содержимого все, что не находится внутри элемента управления Content (за исключением блоков сценария для серверного кода), приводит к возникновению ошибки. Все задачи, выполняемые на странице ASP.NET, могут быть выполнены на странице содержимого. Например, можно создать содержимое для элемента управления Content с помощью серверных элементов управления и запросов к базам данных или других динамических механизмов.

Страница содержимого может выглядеть следующим образом:

<% @ Page Language="VB" MasterPageFile="~/Master.master" Title="Content Page 1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server">
    Main content.
</asp:Content>
    
<asp:Content ID="Content2" ContentPlaceHolderID="Footer" Runat="Server" >
    Footer content.
</asp:content>

[C#]

<% @ Page Language="C#" MasterPageFile="~/Master.master" Title="Content Page 1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server">
    Main content.
</asp:Content>
    
<asp:Content ID="Content2" ContentPlaceHolderID="Footer" Runat="Server" >
    Footer content.
</asp:content>

Директива @ Page связывает страницу содержимого с определенной главной страницей и определяет заголовок для страницы, которая будет объединена с главной. Обратите внимание, что страница содержимого не содержит разметки вне элементов управления Content. (Главная страница должна содержать элемент head с атрибутом runat="server", чтобы установка заголовка могла быть выполнена во время выполнения.)

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

Преимущества главных страниц

Главные страницы предоставляют функции, которые ранее были доступны разработчикам путем повторного копирования существующего кода, текста и элементов управления, использования наборов фреймов, включаемых файлов для общих элементов, пользовательских элементов управления ASP.NET и т. д. К преимуществам главных страниц можно отнести следующие:

  • Главные страницы позволяют централизовать общие функции страниц, чтобы обновление всех страниц можно было осуществлять в одном месте.

  • Главные страницы позволяют создать один набор элементов управления и код и применить результаты к набору страниц. Например, можно использовать элементы управления на главной странице для создания меню, которое может применяться ко всем страницам.

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

  • Главные страницы предоставляют объектную модель, позволяющую настроить главную страницу из отдельных страниц содержимого.

Поведение главных страниц во время выполнения

Во время выполнения главные страницы обрабатываются в следующей последовательности:

  1. Пользователи отправляют запрос на страницу путем ввода URL-адреса страницы содержимого.

  2. Когда страница извлекается, происходит чтение директивы @ Page. Если директива ссылается на главную страницу, также выполняется чтение главной страницы. При первом запросе на эти страницы выполняется компиляция обеих страниц.

  3. Главная страница с обновленным содержимым объединяется с деревом управления страницы содержимого.

  4. Содержимое отдельных элементов управления Content объединяется с соответствующим элементом управления ContentPlaceHolder на главной странице.

  5. Получившаяся в результате объединения страница отображается в веб-обозревателе.

Этот процесс показан на следующей схеме:

Главные страницы во время выполнения

График MasterPagesMerge

Для пользователей страница, составленная при объединении главной страницы и страницы содержимого, является отдельной страницей. URL-адресом этой страницы является URL-адрес страницы содержимого.

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

Обратите внимание, что главная страница становится частью страницы содержимого. По сути, главная страница во многом играет роль пользовательского элемента управления: она является дочерним элементом страницы содержимого и контейнером внутри нее. Однако в этом случае главная страница является контейнером для всех серверных элементов управления, которые отображаются в веб-обозревателе. Дерево управления для объединенной главной страницы и страницы содержимого выглядит следующим образом:

Page
    Master Page
        (Master page markup and controls)
        ContentPlaceHolder
            Content page markup and server controls
        (Master page markup and controls)
        ContentPlaceHolder
            Content page markup and server controls
        (Master page markup and controls)

Данная схема является упрощенной. Если на странице содержимого не имеется соответствующих элементов управления Content, главная страница также может содержать разметку и элементы управления в элементах управления ContentPlaceHolder.

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

Путь к главной странице и странице содержимого

При выполнении запроса на страницу содержимого содержимое сливается с главной страницей, и страница открывается в контексте страницы содержимого. Например, при получении свойства CurrentExecutionFilePath объекта HttpRequest в коде главной страницы или страницы содержимого путь представляет расположение страницы содержимого.

Главная страница и страница содержимого могут находиться в разных папках. Поскольку атрибут MasterPageFile директивы @ Page на странице содержимого разрешается в главную страницу, ASP.NET может объединить главную страницу и страницу содержимого в одну страницу, которая и будет отображена.

Ссылки на внешние ресурсы

Как и страницы содержимого, главные страницы содержат элементы управления и элементы, которые ссылаются на внешние ресурсы. Например, и те, и другие содержат элементы управления "Изображение", которые ссылаются на файлы изображения, или они могут содержать привязки, которые ссылаются на другие страницы.

Контекстом для объединения страницы содержимого и главной страницы является контекст страницы содержимого. Это может оказать влияние на способ указания URL-адресов ресурсов в привязках, таких как файлы изображений или конечных страниц.

Серверные элементы управления

В серверных элементах управления на главных страницах ASP.NET динамически изменяет URL-aдреса свойств, которые ссылаются на внешние ресурсы. Например, можно поместить элемент управления Image на главную страницу и указать, что его свойство ImageUrl задается относительно главной страницы. Во время выполнения ASP.NET изменяет URL-адрес таким образом, что он разрешается правильно в контексте страницы содержимого.

URL-адреса могут быть изменены в ASP.NET в следующих случаях:

  • URL-адрес является свойством серверного элемента управления ASP.NET.

  • Данное свойство помечается внутри элемента управления как URL-адрес. (Свойство помечается с помощью атрибута UrlPropertyAttribute). На практике это означает, что таким образом помечаются свойства серверных элементов управления ASP.NET, которые обычно используются для ссылки на внешние ресурсы.

Другие элементы

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

Как правило, при работе с элементами на главных страницах рекомендуется использовать серверные элементы управления, для которых не требуется серверный код. Например, вместо элемента img следует использовать серверный элемент управления Image. Это способствует правильному разрешению URL-адресов ASP.NET и позволяет избежать проблем при обслуживании страниц, которые могут возникнуть при перемещении главной страницы или страницы содержимого.

Дополнительные сведения об указании путей для серверных элементов управления ASP.NET см. в разделе Путь к веб-узлу ASP.NET.

Главные страницы и темы

Нельзя применять темы ASP.NET напрямую к главной странице. Если добавить атрибут theme в директиве @ Master, при запуске страницы произойдет ошибка.

Тем не менее темы применяются к главным страницам при следующих условиях:

  • Если тема определена на странице содержимого. Главные страницы разрешаются в контексте страниц содержимого, поэтому темы страниц содержимого также применяются к главной странице.

  • Если весь узел настроен на использование одной темы путем включения определения темы в элемент Элемент pages (схема параметров ASP.NET).

Дополнительные сведения см. в разделе Общие сведения о темах и обложках ASP.NET.

Определение области действия для главных страниц

Можно выполнять вложение страниц содержимого в главную страницу на трех уровнях.

  • На уровне страницы.   Можно использовать директиву страницы в каждой странице содержимого для ее привязки к главной странице, как показано в следующем примере кода:

    <%@ Page Language="VB" MasterPageFile="MySite.Master" %> 
    
    <%@ Page Language="C#" MasterPageFile="MySite.Master" %> 
    
  • На уровне приложения.   Задав параметр в элементе pages файла конфигурации приложения (Web.config), можно указать, чтобы выполнялась автоматическая привязка всех страниц ASP.NET (ASPX-файлов) в приложении к главной странице. Элемент может выглядеть следующим образом:

    <pages masterPageFile="MySite.Master" />
    

    При использовании этой стратегии все страницы ASP.NET в приложении, которые содержат элементы управления Content, объединяются с указанной главной страницей. (Если на странице ASP.NET не содержатся элементы управления Content, главная страница не применяется).

  • На уровне папки.   Данная стратегия аналогична выполнению привязки на уровне приложения, за исключением того, что параметр устанавливается в файле Web.config только в одной папке. Затем привязки к главной странице применяются к страницам ASP.NET в этой папке.

См. также

Задачи

Практическое руководство. Ссылка на содержимое главной страницы ASP.NET

Практическое руководство. Ссылка на содержимое главной страницы ASP.NET

Основные понятия

События на главных страницах и страницах содержимого ASP.NET

Вложенные главные страницы ASP.NET