https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx |
Шаблоны дизайна страниц ASP .NET
Содержание по умолчанию
В главной странице может быть определено содержание, которое будет отображаться по умолчанию. Оно помещается в элементах ContentPlaceHolder и наследуется всеми дочерними страницами. Если дочерняя страница не переопределит содержание по умолчанию, оно будет использоваться при ее отображении. Создадим элемент управления SiteMapPath, который поместим в ContentPlaceHolder1:
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> <asp:SiteMapPath ID="SiteMapPath1" runat="server"> </asp:SiteMapPath> </asp:contentplaceholder>
На странице MainSchool.aspx он отображаться не будет, так как в ней определены оба элемента Content. Однако, если в следующей странице определен только один из элементов Contentѕ
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Voting.aspx.cs" Inherits="Voting" MasterPageFile="~/MasterPage.master" %> <asp:Content ContentPlaceHolderID="ContentPlaceHolder2" runat="server"> Какой язык программирования Вы предпочитаете?<br /> <asp:RadioButtonList ID="rblVoting" runat="server" DataSourceID="SqlDataSource1" DataTextField="variant" DataValueField="id"> </asp:RadioButtonList><br /> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:PollsConnectionString %>" SelectCommand="SELECT [id], [variant] FROM [poll] ORDER BY [variant] "></asp:SqlDataSource> <br /> <asp:Button ID="Button1" runat="server" Text="Выбрать" /><br /> </asp:Content>
Если посмотреть ее в браузере, увидим, что в ее левой части "хлебные крошки" отображаются.
Программное назначение главной страницы
В странице содержания можно переназначить ее главную страницу программно. Для этого нужно присвоить нужное значение свойству Page.MasterPageFile. Шаблон поменяется независимо от того, какой шаблон был назначен в директиве @Page. Но если попробуете проделать это в функциях Page_Load или Page_Init, получите ошибку времени выполнения.
Это свойство можно изменить только во время обработки события Page_PreInit. Событие Page_PreInit — самая ранняя фаза жизненного цикла страницы, к которой можно получить доступ. Во время события Init главная и дочерняя страница уже сливаются в одну, поэтому поздно менять шаблон. По этой причине событие Page_PreInit — единственное, в обработчике которого можно работать с главной страницей отдельно от страницы содержания:
protected void Page_PreInit(object sender, EventArgs e) { Page.MasterPageFile = "~/MyMasterPage.master"; }
Для того чтобы из страницы содержания обратиться к элементам управления главной страницы, можно воспользоваться функцией FindControl. Непосредственно обратиться к ним нельзя, так как это защищенные члены.
Label mpLabel = (Label) Master.FindControl("masterPageLabel"); if(mpLabel != null) { //Set content page title to master page control Title.Text = mpLabel.Text }
Страницы шаблона могут иметь методы и свойства. Чтобы можно было обращаться к ним, нужно использовать директиву @MasterType. При этом становится доступен класс страницы шаблона дизайна через строго типизированную ссылку. Атрибут TypeName задает имя типа, а VirtualPath — путь относительно корневого каталога web-приложения к файлу шаблона:
<%@ page language="C#" masterpagefile="~/Site3.master" %> <%@ mastertype virtualpath="~/Site3.master" %>
Свойства могут быть определены в классе главной страницы:
public String FooterText { get { return Footer.Text; } set { Footer.Text = value; } }
Таким образом, страница разрешает доступ извне к свойствам своих элементов.
Страница содержания меняет это свойство, а элемент управления AdRotator находит с помощью FindControl:
void Page_Load() { Master.FooterText = "This is a custom footer"; AdRotator ad = (AdRotator)Master.FindControl("MyAdRotator"); if (ad != null) { ad.BorderColor = System.Drawing.Color.Purple; ad.BorderWidth = 10; } }