Несколько элементов управления ContentPlaceHolder и содержимое по умолчанию (C#)Multiple ContentPlaceHolders and Default Content (C#)

по Скотт Митчеллby Scott Mitchell

Скачать код или скачать PDFDownload Code or Download PDF

Рассматриваются способы добавления нескольких владельцев на главную страницу, а также указания содержимого по умолчанию в заполнители содержимого.Examines how to add multiple content place holders to a master page as well as how to specify default content in the content place holders.

ВведениеIntroduction

В предыдущем учебном курсе мы рассмотрели, как главные страницы позволяют разработчикам ASP.NET создавать единообразные макеты для всего сайта.In the preceding tutorial we examined how master pages enable ASP.NET developers to create a consistent site-wide layout. Главные страницы определяют разметку, которая является общей для всех страниц содержимого и регионов, настраиваемых на уровне отдельных страниц.Master pages define both markup that is common to all of its content pages and regions that are customizable on a page-by-page basis. В предыдущем учебном курсе мы создали простую главную страницу (Site.master) и две страницы содержимого (Default.aspx и About.aspx).In the previous tutorial we created a simple master page (Site.master) and two content pages (Default.aspx and About.aspx). Наша главная страница состоит из двух элементов управления ContentPlaceHolder с именами head и MainContent, которые расположены в элементе <head> и в веб-форме соответственно.Our master page consisted of two ContentPlaceHolders named head and MainContent, which were located in the <head> element and Web Form, respectively. Хотя страницы содержимого имеют два элемента управления содержимым, мы указали только разметку, соответствующую MainContent.While the content pages each had two Content controls, we only specified markup for the one corresponding to MainContent.

Как свидетельствует два элемента управления ContentPlaceHolder в Site.master, Главная страница может содержать несколько элементов управления ContentPlaceHolder.As evidenced by the two ContentPlaceHolder controls in Site.master, a master page may contain multiple ContentPlaceHolders. Более того, на главной странице может быть задана разметка по умолчанию для элементов управления ContentPlaceHolder.What's more, the master page may specify default markup for the ContentPlaceHolder controls. На странице содержимого можно дополнительно указать собственную разметку или использовать разметку по умолчанию.A content page, then, can optionally specify its own markup or use the default markup. В этом учебнике мы рассмотрим использование нескольких элементов управления содержимым на главной странице и Узнайте, как определить разметку по умолчанию в элементах управления ContentPlaceHolder.In this tutorial we look at using multiple content controls in the master page and see how to define default markup in the ContentPlaceHolder controls.

Шаг 1. Добавление дополнительных элементов управления ContentPlaceHolder на главную страницуStep 1: Adding Additional ContentPlaceHolder Controls to the Master Page

Многие разработки веб-сайтов содержат несколько областей на экране, которые настраиваются отдельно на странице.Many website designs contain several areas on the screen that are customized on a page-by-page basis. Site.master, Главная страница, созданная в предыдущем руководстве, содержит один элемент ContentPlaceHolder внутри веб-формы с именем MainContent.Site.master, the master page we created in the preceding tutorial, contains a single ContentPlaceHolder within the Web Form named MainContent. В частности, этот ContentPlaceHolder находится в элементе mainContent <div>.Specifically, this ContentPlaceHolder is located within the mainContent <div> element.

На рис. 1 показано, Default.aspx при просмотре в браузере.Figure 1 shows Default.aspx when viewed through a browser. Регион, обозначенный красным цветом, является разметкой, зависящей от страницы, соответствующей MainContent.The region circled in red is the page-specific markup corresponding to MainContent.

область в кружке отображает область, настраиваемую в настоящее время на уровне отдельных страниц.The Circled Region Shows the Area Currently Customizable on a Page-by-Page Basis

Рис. 01. область в кружке отображает область, настраиваемую в данный момент на отдельной странице (щелкните, чтобы просмотреть изображение с полным размером)Figure 01: The Circled Region Shows the Area Currently Customizable on a Page-by-Page Basis (Click to view full-size image)

Представьте, что в дополнение к региону, показанному на рис. 1, нам также нужно добавить элементы, относящиеся к странице, к левому столбцу, расположенному в разделах «уроки» и «новости».Imagine that in addition to the region shown in Figure 1, we also need to add page-specific items to the left column beneath the Lessons and News sections. Для этого мы добавим на главную страницу еще один элемент управления ContentPlaceHolder.To accomplish this, we add another ContentPlaceHolder control to the master page. Чтобы продолжить работу, откройте главную страницу Site.master в Visual Web Developer и перетащите элемент управления ContentPlaceHolder с панели элементов в конструктор после раздела новостей.To follow along, open the Site.master master page in Visual Web Developer and then drag a ContentPlaceHolder control from the Toolbox onto the designer after the News section. Задайте для ID ContentPlaceHolder значение LeftColumnContent.Set the ContentPlaceHolder's ID to LeftColumnContent.

добавить элемент управления ContentPlaceHolder в левый столбец главной страницыAdd a ContentPlaceHolder Control to the Master Page's Left Column

Рис. 02. Добавление элемента управления ContentPlaceHolder в левый столбец главной страницы (щелкните, чтобы просмотреть изображение с полным размером)Figure 02: Add a ContentPlaceHolder Control to the Master Page's Left Column (Click to view full-size image)

С добавлением LeftColumnContent ContentPlaceHolder на главную страницу можно определить содержимое для этого региона на отдельной странице, включив на странице элемент управления содержимым, для которого ContentPlaceHolderID задано значение LeftColumnContent.With the addition of the LeftColumnContent ContentPlaceHolder to the master page, we can define content for this region on a page-by-page basis by including a Content control in the page whose ContentPlaceHolderID is set to LeftColumnContent. Мы рассмотрим этот процесс на шаге 2.We examine this process in Step 2.

Шаг 2. Определение содержимого для нового ContentPlaceHolder на страницах содержимогоStep 2: Defining Content for the New ContentPlaceHolder in the Content Pages

При добавлении новой страницы содержимого на веб-сайт Visual Web Developer автоматически создает на странице элемент управления содержимым для каждого элемента ContentPlaceHolder на выбранной главной странице.When adding a new content page to the website, Visual Web Developer automatically creates a Content control in the page for each ContentPlaceHolder in the selected master page. После добавления LeftColumnContent ContentPlaceHolder на главную страницу на шаге 1 новые страницы ASP.NET теперь будут иметь три элемента управления содержимым.Having added a the LeftColumnContent ContentPlaceHolder to our master page in Step 1, new ASP.NET pages will now have three Content controls.

Чтобы проиллюстрировать это, добавьте новую страницу содержимого в корневой каталог с именем MultipleContentPlaceHolders.aspx, привязанный к главной странице Site.master.To illustrate this, add a new content page to the root directory named MultipleContentPlaceHolders.aspx that is bound to the Site.master master page. Visual Web Developer создает эту страницу со следующей декларативной разметкой:Visual Web Developer creates this page with the following declarative markup:

<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="MultipleContentPlaceHolders.aspx.cs" Inherits="MultipleContentPlaceHolders" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="LeftColumnContent" Runat="Server">
</asp:Content>

Введите некоторое содержимое в элемент управления содержимым, ссылающийся на MainContent элементов управления ContentPlaceHolder (Content2).Enter some content into the Content control referencing the MainContent ContentPlaceHolders (Content2). Затем добавьте следующую разметку в элемент управления содержимым Content3 (который ссылается на LeftColumnContent ContentPlaceHolder):Next, add the following markup to the Content3 Content control (which references the LeftColumnContent ContentPlaceHolder):

<h3>Page-Specific Content</h3>
<ul>
 <li>This content is defined in the content page.</li>
 <li>The master page has two regions in the Web Form that are editable on a
 page-by-page basis.</li>
</ul>

После добавления этой разметки посетите страницу в браузере.After adding this markup, visit the page through a browser. Как показано на рис. 3, разметка, помещенная в Content3 элемент управления содержимым, отображается в левом столбце под разделом новостей (в кружке красным цветом).As Figure 3 shows, the markup placed in the Content3 Content control is displayed in the left column beneath the News section (circled in red). Разметка, помещенная в Content2, отображается в правой части страницы (в кружке синим цветом).The markup placed in Content2 is displayed in the right portion of the page (circled in blue).

левый столбец теперь включает в себя содержимое, относящееся к странице, под областью новостейThe Left Column Now Includes Page-Specific Content Beneath the News Section

Рис. 03. Теперь левый столбец включает в себя содержимое, относящееся к странице, под областью новостей (щелкните, чтобы просмотреть изображение с полным размером).Figure 03: The Left Column Now Includes Page-Specific Content Beneath the News Section (Click to view full-size image)

Определение содержимого в существующих страницах содержимогоDefining Content in Existing Content Pages

При создании новой страницы содержимого автоматически включается элемент управления ContentPlaceHolder, добавленный на шаге 1.Creating a new content page automatically incorporates the ContentPlaceHolder control we added in Step 1. Но две имеющиеся страницы содержимого — About.aspx и Default.aspx-нет элемента управления содержимым для LeftColumnContent ContentPlaceHolder.But our two existing content pages - About.aspx and Default.aspx - don't have a Content control for the LeftColumnContent ContentPlaceHolder. Чтобы указать содержимое для этого ContentPlaceHolder в этих двух существующих страницах, необходимо добавить элемент управления содержимым.To specify content for this ContentPlaceHolder in these two existing pages, we need to add a Content control ourselves.

В отличие от большинства веб-элементов управления ASP.NET, панель элементов Visual Web Developer не включает элемент элемента управления содержимым.Unlike most ASP.NET Web controls, the Visual Web Developer Toolbox does not include a Content control item. Можно вручную ввести декларативную разметку элемента управления содержимым в представление исходного кода, но более простой и быстрый подход заключается в использовании представление конструирования.We can manually type in the Content control's declarative markup into the Source view, but an easier and quicker approach is to use the Design view. Откройте страницу About.aspx и переключитесь на представление конструирования.Open the About.aspx page and switch to the Design view. Как показано на рис. 4, LeftColumnContent ContentPlaceHolder отображается в представление конструирования; Если навести на него указатель мыши, отображается заголовок: "Лефтколумнконтент (Master)".As Figure 4 illustrates, the LeftColumnContent ContentPlaceHolder appears in the Design view; if you mouse over it, the title displayed reads: "LeftColumnContent (Master)." Включение "главного" в заголовок означает, что на странице для этого ContentPlaceHolder не определен элемент управления содержимым.The inclusion of "Master" in the title indicates that there is no Content control defined in the page for this ContentPlaceHolder. Если для ContentPlaceHolder существует элемент управления содержимым, как в случае с MainContent, заголовок будет читать: «ContentPlaceHolderID (Custom)».If there exists a Content control for the ContentPlaceHolder, as in the case for MainContent, the title will read: "ContentPlaceHolderID (Custom)."

Чтобы добавить элемент управления содержимым для LeftColumnContent ContentPlaceHolder для About.aspx, разверните смарт-тег ContentPlaceHolder и щелкните ссылку создать настраиваемое содержимое.To add a Content control for the LeftColumnContent ContentPlaceHolder to About.aspx, expand the ContentPlaceHolder's smart tag and click the Create Custom Content link.

представление конструктора для About. aspx показывает Лефтколумнконтент ContentPlaceHolderThe Design View for About.aspx Shows the LeftColumnContent ContentPlaceHolder

Рис. 04. представление конструктора для About.aspx показывает LeftColumnContent ContentPlaceHolder (щелкните, чтобы просмотреть изображение с полным размером)Figure 04: The Design View for About.aspx Shows the LeftColumnContent ContentPlaceHolder (Click to view full-size image)

Если щелкнуть ссылку создать настраиваемое содержимое, на странице будет создан необходимый элемент управления содержимым и задается его свойство ContentPlaceHolderID IDContentPlaceHolder.Clicking the Create Custom Content link generates the necessary Content control in the page and sets its ContentPlaceHolderID property to the ContentPlaceHolder's ID. Например, если щелкнуть ссылку создать настраиваемое содержимое для LeftColumnContent региона в About.aspx добавляет на страницу следующую декларативную разметку:For example, clicking the Create Custom Content link for LeftColumnContent region in About.aspx adds the following declarative markup to the page:

<asp:Content ID="Content3" runat="server" contentplaceholderid="LeftColumnContent">
 
</asp:Content>

Пропуск элементов управления содержимымOmitting Content Controls

ASP.NET не требует, чтобы все страницы содержимого включали элементы управления содержимым для каждого элемента ContentPlaceHolder, определенного на главной странице.ASP.NET does not require that all content pages include Content controls for each and every ContentPlaceHolder defined in the master page. Если элемент управления содержимым не указан, подсистема ASP.NET использует разметку, определенную в ContentPlaceHolder на главной странице.If a Content control is omitted, the ASP.NET engine uses the markup defined within the ContentPlaceHolder in the master page. Эта разметка называется содержимым по умолчанию ContentPlaceHolder и полезна в сценариях, где содержимое некоторого региона является общим для большинства страниц, но его необходимо настроить для небольшого числа страниц.This markup is referred to as the ContentPlaceHolder's default content and is useful in scenarios where the content for some region is common among the majority of pages, but needs to be customized for a small number of pages. На шаге 3 рассматривается указание содержимого по умолчанию на главной странице.Step 3 explores specifying default content in the master page.

В настоящее время Default.aspx содержит два элемента управления содержимым для head и MainContent элементов управления ContentPlaceHolder; у него нет элемента управления содержимым для LeftColumnContent.Currently, Default.aspx contains two Content controls for the head and MainContent ContentPlaceHolders; it does not have a Content control for LeftColumnContent. Следовательно, при визуализации Default.aspx используется содержимое по умолчанию LeftColumnContent ContentPlaceHolder.Consequently, when Default.aspx is rendered the LeftColumnContent ContentPlaceHolder's default content is used. Так как мы еще не определили содержимое по умолчанию для этого ContentPlaceHolder, в результате в этом регионе разметка не создается.Because we have yet to define any default content for this ContentPlaceHolder, the net effect is that no markup is emitted for this region. Чтобы проверить это поведение, перейдите в Default.aspx через браузер.To verify this behavior, visit Default.aspx through a browser. Как показано на рис. 5, в левом столбце ниже раздела News не создается разметка.As Figure 5 shows, no markup is emitted in the left column beneath the News section.

для Лефтколумнконтент ContentPlaceHolder не отображается содержимоеNo Content is Rendered for the LeftColumnContent ContentPlaceHolder

Рис. 05. для LeftColumnContent ContentPlaceHolder не отображается содержимое (щелкните, чтобы просмотреть изображение с полным размером)Figure 05: No Content is Rendered for the LeftColumnContent ContentPlaceHolder (Click to view full-size image)

Шаг 3. Указание содержимого по умолчанию на главной страницеStep 3: Specifying Default Content in the Master Page

Некоторые разработки веб-сайтов включают регион, содержимое которого одинаково для всех страниц сайта, за исключением одного или двух исключений.Some website designs include a region whose content is the same for all pages in the site except for one or two exceptions. Рассмотрим веб-сайт, который поддерживает учетные записи пользователей.Consider a website that supports user accounts. Такой сайт требует страницы входа, где посетители могут ввести свои учетные данные для входа на сайт.Such a site requires a login page where visitors can enter their credentials to sign into the site. Для ускорения процесса входа конструкторы веб-сайтов могут содержать текстовые поля "имя пользователя" и "пароль" в левом верхнем углу каждой страницы, чтобы пользователи могли выполнять вход без явного посещения страницы входа.To expedite the sign in process, the website designers might include username and password textboxes in the upper left corner of every page to allow users to sign in without having to explicitly visit the login page. Хотя эти текстовые поля имени пользователя и пароля полезны на большинстве страниц, они избыточны на странице входа, которая уже содержит текстовые поля для учетных данных пользователя.While these username and password textboxes are helpful in most pages, they are redundant in the login page, which already contains textboxes for the user's credentials.

Для реализации этой схемы можно создать элемент управления ContentPlaceHolder в левом верхнем углу главной страницы.To implement this design, you could create a ContentPlaceHolder control in the upper left corner of the master page. Каждая страница, необходимая для вывода текстовых полей username и Password в левом верхнем углу, создает элемент управления содержимым для этого ContentPlaceHolder и добавляет необходимый интерфейс.Each page that needed to display the username and password textboxes in their upper left corner would create a Content control for this ContentPlaceHolder and add the necessary interface. На странице входа с другой стороны будет либо опустить Добавление элемента управления содержимым для этого ContentPlaceHolder, либо создать элемент управления содержимым без определенного разметки.The login page, on the other hand, would either omit adding a Content control for this ContentPlaceHolder or would create a Content control with no markup defined. Недостаток этого подхода заключается в том, что необходимо добавить текстовые поля username и Password на каждую страницу, добавляемую на сайт (за исключением страницы входа).The downside of this approach is that we have to remember to add the username and password textboxes to every page we add to the site (except for the login page). Это запрашивает проблемы.This is asking for trouble. Мы, вероятно, забыли добавить эти текстовые поля на страницу или две или, что хуже, мы можем неправильно реализовать интерфейс (например, можно добавить только одно текстовое поле, а не два).We're likely to forget to add these textboxes to a page or two or, worse, we might not implement the interface correctly (perhaps adding just one textbox instead of two).

Лучшим решением является определение текстовых полей username и Password как содержимого ContentPlaceHolder по умолчанию.A better solution is to define the username and password textboxes as the ContentPlaceHolder's default content. Таким образом, нам нужно переопределить это содержимое по умолчанию на нескольких страницах, не отображающих текстовые поля username и Password (например, страница входа).By doing so, we only need to override this default content in those few pages that do not display the username and password textboxes (the login page, for instance). Чтобы продемонстрировать указание содержимого по умолчанию для элемента управления ContentPlaceHolder, давайте рассмотрим описанный сценарий.To illustrate specifying default content for a ContentPlaceHolder control, let's implement the scenario just discussed.

Note

Оставшаяся часть этого руководства обновляет веб-сайт, чтобы включить в левый столбец интерфейс входа для всех страниц, кроме страницы входа.The remainder of this tutorial updates our website to include a login interface in the left column for all pages but the login page. Однако в этом учебнике не рассматривается настройка веб-сайта для поддержки учетных записей пользователей.However, this tutorial does not examine how to configure the website to support user accounts. Дополнительные сведения об этом разделе см. в руководствах по проверке подлинности, авторизации, учетным записям пользователей и ролям .For more information on this topic, refer to my Forms Authentication, Authorization, User Accounts and Roles tutorials.

Добавление элемента ContentPlaceHolder и указание его содержимого по умолчаниюAdding a ContentPlaceHolder and Specifying Its Default Content

Откройте Site.master главную страницу и добавьте следующую разметку в левый столбец между DateDisplay меток и занятиями:Open the Site.master master page and add the following markup to the left column between the DateDisplay Label and Lessons section:

<asp:ContentPlaceHolder ID="QuickLoginUI" runat="server">
 <asp:Login ID="QuickLogin" runat="server" 
    TitleText="<h3>Sign In</h3>"
    FailureAction="RedirectToLoginPage">
 </asp:Login>
</asp:ContentPlaceHolder>

После добавления этой разметки представление конструирования на главной странице должна выглядеть примерно так, как показано на рис. 6.After adding this markup your master page's Design view should look similar to Figure 6.

Главная страница содержит элемент управления LoginThe Master Page Includes a Login Control

Рис. 6. Главная страница содержит элемент управления Login (щелкните, чтобы просмотреть изображение с полным размером)Figure 06: The Master Page Includes a Login Control (Click to view full-size image)

В этом ContentPlaceHolder, QuickLoginUI, в качестве содержимого по умолчанию используется веб-элемент управления Login.This ContentPlaceHolder, QuickLoginUI, has a Login Web control as its default content. Элемент управления Login отображает пользовательский интерфейс, предлагающий пользователю ввести имя пользователя и пароль, а также кнопку Вход.The Login control displays a user interface that prompts the user for their username and password along with a Log In button. При нажатии кнопки Вход элемент управления входа внутренне проверяет учетные данные пользователя на соответствие API членства.Upon clicking the Log In button, the Login control internally validates the user's credentials against the Membership API. Чтобы использовать этот элемент управления входа на практике, необходимо настроить сайт для использования членства.To use this Login control in practice, then, you need to configure your site to use Membership. Этот раздел выходит за рамки данного учебника. Дополнительные сведения о создании веб-приложения, поддерживающего учетные записи пользователей, см. в руководствах по проверке подлинности, авторизации, учетным записям пользователей и ролям .This topic is beyond the scope of this tutorial; refer to my Forms Authentication, Authorization, User Accounts and Roles tutorials for more information on building a web application that supports user accounts.

Вы можете настроить поведение или внешний вид элемента управления входа.Feel free to customize the Login control's behavior or appearance. Я установил два свойства: TitleText и FailureAction.I have set two of its properties: TitleText and FailureAction. Значение свойства TitleText, по умолчанию «вход», отображается в верхней части пользовательского интерфейса элемента управления.The TitleText property value, which defaults to "Log In", is displayed at the top of the control's user interface. Я установил это свойство таким образом, чтобы он отображал текст "вход" в качестве элемента <h3>.I have set this property so that it displays the text "Sign In" as an <h3> element. Свойство FailureAction указывает, что делать, если учетные данные пользователя недопустимы.The FailureAction property indicates what to do if the user's credentials are invalid. По умолчанию используется значение Refresh, которое оставляет пользователя на той же странице и отображает сообщение об ошибке в элементе управления Login.It defaults to a value of Refresh, which leaves the user on the same page and displays a failure message within the Login control. Я изменил его на RedirectToLoginPage, который отправляет пользователя на страницу входа в случае недопустимых учетных данных.I've changed it to RedirectToLoginPage, which sends the user to the login page in the event of invalid credentials. Я предпочитаю отсылать пользователя на страницу входа, когда пользователь пытается войти с какой-либо другой страницы, но завершается ошибкой, так как страница входа может содержать дополнительные инструкции и параметры, которые не могут быть правильно размещены в левом столбце.I prefer to send the user to the login page when a user attempts to login from some other page, but fails, because the login page can contain additional instructions and options that would not easily fit into the left column. Например, страница входа может содержать параметры для получения забытого пароля или для создания новой учетной записи.For example, the login page might include options to retrieve a forgotten password or to create a new account.

Создание страницы входа и переопределение содержимого по умолчаниюCreating the Login Page and Overriding the Default Content

После завершения работы с главной страницей необходимо создать страницу входа.With the master page complete, our next step is to create the login page. Добавьте страницу ASP.NET в корневой каталог сайта с именем Login.aspx, привязывая его к главной странице Site.master.Add an ASP.NET page to your site's root directory named Login.aspx, binding it to the Site.master master page. Это приведет к созданию страницы с четырьмя элементами управления содержимым, по одному для каждого элементов управления ContentPlaceHolder, определенного в Site.master.Doing so will create a page with four Content controls, one for each of the ContentPlaceHolders defined in Site.master.

Добавьте элемент управления Login в MainContent элемент управления содержимым.Add a Login control to the MainContent Content control. Аналогичным образом вы можете добавить любое содержимое в LeftColumnContent регион.Likewise, feel free to add any content to the LeftColumnContent region. Однако не забудьте оставить элемент управления содержимым для QuickLoginUI ContentPlaceHolder Empty.However, make sure to leave the Content control for the QuickLoginUI ContentPlaceHolder empty. Это обеспечит, что элемент управления Login не будет отображаться в левом столбце страницы входа.This will ensure that the Login control does not appear in the left column of the login page.

После определения содержимого для регионов MainContent и LeftColumnContent декларативная разметка страницы входа должна выглядеть следующим образом:After defining the content for the MainContent and LeftColumnContent regions, your login page's declarative markup should look similar to the following:

<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
 <h2>
 Sign In</h2>
 <p>
 <asp:Login ID="Login1" runat="server" TitleText="">
 </asp:Login>
 </p>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="QuickLoginUI" Runat="Server">
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="LeftColumnContent" Runat="Server">
 <h3>Sign In Tasks</h3>
 <ul>
 <li>Create a New Account</li>
 <li>Recover Forgotten Password</li>
 </ul>
 <p>TODO: Turn the above text into links...</p>
</asp:Content>

На рис. 7 показана эта страница при просмотре в браузере.Figure 7 shows this page when viewed through a browser. Так как на этой странице указан элемент управления содержимым для QuickLoginUI ContentPlaceHolder, он переопределяет содержимое по умолчанию, заданное на главной странице.Because this page specifies a Content control for the QuickLoginUI ContentPlaceHolder, it overrides the default content specified in the master page. Результатом является то, что элемент управления входа, отображаемый на представление конструирования главной страницы (см. рис. 6), не отображается на этой странице.The net effect is that the Login control displayed in the master page's Design view (see Figure 6) is not rendered in this page.

страница входа снова нажимает содержимое Куикклогинуи ContentPlaceHolder по умолчаниюThe Login Page Represses the QuickLoginUI ContentPlaceHolder's Default Content

Рис. 07. страница входа повторно нажимает содержимое по умолчанию QuickLoginUI ContentPlaceHolder (щелкните, чтобы просмотреть изображение с полным размером)Figure 07: The Login Page Represses the QuickLoginUI ContentPlaceHolder's Default Content (Click to view full-size image)

Использование содержимого по умолчанию на новых страницахUsing the Default Content in New Pages

Нам нужно отобразить элемент управления Login в левом столбце для всех страниц, кроме страницы входа.We want to show the Login control in the left column for all pages except the Login page. Для этого все страницы содержимого, за исключением страницы входа, должны опускать элемент управления содержимым для QuickLoginUI ContentPlaceHolder.To achieve this, all the content pages except for the login page should omit a Content control for the QuickLoginUI ContentPlaceHolder. Если элемент управления содержимым отсутствует, вместо него будет использоваться содержимое ContentPlaceHolder по умолчанию.By omitting a Content control, the ContentPlaceHolder's default content will be used instead.

Наши существующие страницы содержимого — Default.aspx, About.aspxи MultipleContentPlaceHolders.aspx — не включают элемент управления содержимым для QuickLoginUI, поскольку они были созданы до добавления этого элемента управления ContentPlaceHolder на главную страницу.Our existing content pages - Default.aspx, About.aspx, and MultipleContentPlaceHolders.aspx - do not include a Content control for QuickLoginUI because they were created before we added that ContentPlaceHolder control to the master page. Поэтому эти существующие страницы не нужно обновлять.Therefore, these existing pages do not need to be updated. Однако новые страницы, добавленные на веб-сайт, включают элемент управления содержимым для QuickLoginUI ContentPlaceHolder, по умолчанию.However, new pages added to the website include a Content control for the QuickLoginUI ContentPlaceHolder, by default. Поэтому следует помнить об удалении этих элементов управления содержимым каждый раз при добавлении новой страницы содержимого (если не требуется переопределять содержимое ContentPlaceHolder по умолчанию, как в случае страницы входа).Therefore, we have to remember to remove these Content controls each time we add a new content page (unless we want to override the ContentPlaceHolder's default content, as in the case of the login page).

Чтобы удалить элемент управления содержимым, можно либо вручную удалить его декларативную разметку из представления исходного кода, либо выбрать ссылку на содержимое по умолчанию из смарт-тега в представление конструирования.To remove the Content control, you can either manually delete its declarative markup from the Source view or, from the Design view, choose the Default to Master's Content link from its smart tag. Любой из этих подходов удаляет элемент управления содержимым из страницы и создает тот же общий результат.Either approach removes the Content control from the page and produces the same net effect.

На рис. 8 показано, Default.aspx при просмотре в браузере.Figure 8 shows Default.aspx when viewed through a browser. Помните, что Default.aspx содержит только два элемента управления содержимым, указанных в декларативной разметке — один для head и один для MainContent.Recall that Default.aspx only has two Content controls specified in its declarative markup - one for head and one for MainContent. В результате отображается содержимое по умолчанию для LeftColumnContent и QuickLoginUI элементов управления ContentPlaceHolder.As a result, the default content for the LeftColumnContent and QuickLoginUI ContentPlaceHolders are displayed.

отображаются содержимое по умолчанию для Лефтколумнконтент и Куикклогинуи элементов управления ContentPlaceHolderThe Default Content for the LeftColumnContent and QuickLoginUI ContentPlaceHolders are Displayed

Рис. 08. Отображение содержимого по умолчанию для LeftColumnContent и QuickLoginUI элементов управления ContentPlaceHolder (щелкните, чтобы просмотреть изображение с полным размером)Figure 08: The Default Content for the LeftColumnContent and QuickLoginUI ContentPlaceHolders are Displayed (Click to view full-size image)

СводкаSummary

Модель главной страницы ASP.NET позволяет произвольное число элементов управления ContentPlaceHolder на главной странице.The ASP.NET master page model allows for an arbitrary number of ContentPlaceHolders in the master page. Более того, элементов управления ContentPlaceHolder включает содержимое по умолчанию, которое создается в случае отсутствия соответствующего элемента управления содержимым на странице содержимого.What's more, ContentPlaceHolders include default content, which is emitted in the case that there is no corresponding Content control in the content page. В этом учебнике мы увидели, как включать дополнительные элементы управления ContentPlaceHolder на главную страницу и как определять элементы управления содержимым для этих новых элементов управления ContentPlaceHolder как в новых, так и в существующих страницах ASP.NET.In this tutorial we saw how to include additional ContentPlaceHolder controls in the master page and how to define Content controls for these new ContentPlaceHolders in both new and existing ASP.NET pages. Мы также рассматривали указание содержимого по умолчанию в ContentPlaceHolder, что полезно в сценариях, где только доли страниц должны настраивать стандартизированное содержимое в определенном регионе.We also looked at specifying default content in a ContentPlaceHolder, which is useful in scenarios where only a minority of pages needs to customize the otherwise standardized content within a certain region.

В следующем учебном курсе мы рассмотрим head ContentPlaceHolder более подробно, как декларативно и программно определять заголовок, Meta-теги и другие заголовки HTML на странице.In the next tutorial we'll examine the head ContentPlaceHolder in more detail, seeing how to declaratively and programmatically define the title, meta tags, and other HTML headers on a page-by-page basis.

Поздравляем с программированием!Happy Programming!

Об автореAbout the Author

Скотт Митчелл, автор нескольких книг по ASP/ASP. NET и основатель 4GuysFromRolla.com, работал с веб-технологиями майкрософт с 1998.Scott Mitchell, author of multiple ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Скотт работает как независимый консультант, преподаватель и модуль записи.Scott works as an independent consultant, trainer, and writer. Его последняя книга — Sams обучать себя ASP.NET 3,5 за 24 часа.His latest book is Sams Teach Yourself ASP.NET 3.5 in 24 Hours. Скотт можно получить по адресу mitchell@4GuysFromRolla.com или через свой блог по адресу http://ScottOnWriting.NET.Scott can be reached at mitchell@4GuysFromRolla.com or via his blog at http://ScottOnWriting.NET.

Специальная благодарностьSpecial Thanks To

Эта серия руководств была рассмотрена многими полезными рецензентами.This tutorial series was reviewed by many helpful reviewers. Специалист по интересу для этого руководства был Сучи Банержи.Lead reviewer for this tutorial was Suchi Banerjee. Хотите ознакомиться с моими будущими статьями MSDN?Interested in reviewing my upcoming MSDN articles? Если это так, расположите строку в mitchell@4GuysFromRolla.com.If so, drop me a line at mitchell@4GuysFromRolla.com.