Обмен информацией между страницами с содержимым (Content Pages) и мастер–страницами (Master Pages) - Передача информации от страницы к её мастер-странице (Master Page)
ОГЛАВЛЕНИЕ
Передача информации от страницы к её мастер-странице (Master Page)
Мастер-страница может напрямую предоставить свои элементы-управления страницам с содержимым. Чтобы передать метод, просто сделайте его публичным (public) в классе code-behind мастер-страницы:
' VB...
Partial Class MasterPageFiles_Main
Inherits System.Web.UI.MasterPage
Public Sub DisplayDataFromPage(ByVal message As String)
DataFromPage.Text = message
End Sub
End Class
// C#
public partial class MasterPageFiles_MainCS : System.Web.UI.MasterPage
{
public void DisplayDataFromPage(string message)
{
DataFromPage.Text = message;
}
}
Здесь DataFromPage это элемент управления Label в декларативной разметке мастер-страницы. Метод DisplayDataFromPage является публичным методом, который может быть вызван со страницы, принадлежащей мастер-странице. Строка, переданная в данный метод, присваивается свойству Text элемента управления Label. Используя данный метод, страница с содержимым может настроить отображаемый текст в элементе DataFromPage Label.
Вдобавок, мастер-страница может передать элемент управления из своего декларативного синтаксиса в качестве свойства, доступного только для чтения (read-only):
' VB...
Partial Class MasterPageFiles_Main
Inherits System.Web.UI.MasterPage
Public ReadOnly Property DataFromPageLabelControl() As Label
Get
Return Me.DataFromPage
End Get
End Property
End Class
// C#
public partial class MasterPageFiles_MainCS : System.Web.UI.MasterPage
{
public Label DataFromPageLabelControl
{
get
{
return this.DataFromPage;
}
}
}
Чтобы получить доступ из страницы с содержимым к методам или свойствам мастер-страницы, свяжите мастер-страницу при помощи свойства Page.Master. Данное свойство возвращает объект типа MasterPage, так что вам придется осуществить его явное преобразование в соответствующий тип до вызова его методов или связывания со свойствами. В качестве альтернативы, вы можете установить директиву @MasterType, которая добавляет свойство в автоматически сгенерированный код класса ASP.NET code-behind, названный Master, который является тесно связанным с указанной мастер-страницей.
Следующая разметка в файле .aspx страницы с содержимым определяет тип мастер-страницы:
<%@ MasterType VirtualPath="pathToMasterPage" %>
Добавив данную директиву (и сохранив файл .aspx), вы можете ссылаться на публичные методы и свойства мастер-страницы программным способом в классе code-behind страницы с содержимым, используя Master следующим образом:
' VB...
Partial Class Demos_PassInfoToMasterPage
Inherits System.Web.UI.Page
Protected Sub ShowText_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ShowText.Click
'Вызов метода DisplayDataFromPage мастер-страницы Main.master
Master.DisplayDataFromPage(TextToShowInMasterPage.Text)
' Опционально: можно сослаться на элемент управления напрямую при помощи свойства DataFromPageLabelControl мастер-страницы
' Master.DataFromPageLabelControl.Text = TextToShowInMasterPage.Text
End Sub
End Class
// C#
public partial class Demos_PassInfoToMasterPageCS : System.Web.UI.Page
{
protected void ShowText_Click(object sender, EventArgs e)
{
// Вызов метода DisplayDataFromPage мастер-страницы Main.master
Master.DisplayDataFromPage(TextToShowInMasterPage.Text);
// Опционально: можно сослаться на элемент управления напрямую при помощи свойства DataFromPageLabelControl мастер-страницы
// Master.DataFromPageLabelControl.Text = TextToShowInMasterPage.Text;
}
}
Код, рассмотренный здесь, а также доступный в конце данной статьи, был скопирован из страницы, включающей в себя элемент TextBox, названный TextToShowInMasterPage, и элемент Button, названный ShowText. Когда нажимают кнопку ShowText - вызывается метод DisplayDataFromPage, передается значение свойства Text элемента TextBox. (В качестве альтернативы, свойство DataFromPageLabelControl мастер-страницы может быть использовано как ссылка на элемент Label в мастер-странице, где может быть установлено свойство Text.) В конечном счете, ввод текста в TextBox на странице и нажатие кнопки Button в результате обновит вид мастер-страницы, отобразив текст, введенный пользователем.
Page.Master против Master |
---|
Если вы используете директиву @MasterType для создания ссылки мастер-страницы, строго контролируемой по типу в классе code-behind страницы, то вы должны использовать Master для получения сильно типизированной ссылки. Если ваш код использует Page.Master, то вы получите слабо типизированную ссылку (т.е. тип которой – MasterPage), и тем самым потребуется приведение типов до того, как определенные элементы мастер-страницы будут доступны. |