|
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;
}
}