проф. В.К.Толстых, Технологии разработки Internet- приложений Эталонные страницы – Master pages Из цикла лекций «Технологии разработки Internet-приложений» для студентов 4-го курса кафедры Компьютерных технологий физического факультета Донецкого национального университета Подготовлено студентом А. Удовиченко
Общие понятия В ASP.NET эталонной страницей (master page, мастер-страницей) называется отдельный файл со статической разметкой, ссылки на который задаются на уровне приложения и отдельных страниц. Настраиваемые области, которые в каждой производной странице будут содержать свой контент, в эталонной странице обозначаются специальными элементами управления заменителями. Производная страница представляет собой набор блоков, которые исполняющая среда подставит на место заменителей эталонной страницы. Мастер-страница подобна обычной странице ASP.NET, отличает ее лишь наличие директивы Master и одного или нескольких серверных элементов управления ContentPlaceHolder. Мастер-страница может не содержать заменителей, и с технической точки зрения она при этом останется корректной, так что исполняющая среда ASP.NET успешно ее обработает. Файл эталонной страницы компилируется в класс, производный от класса MasterPage, который, в свою очередь, является производным от класса UserControl, так что эталонная страница представляет собой просто особую разновидность пользовательского элемента управления ASP.NET.
Пример эталонной страницы Master pages
Атрибуты директивы Master АтрибутОписание ClassName Имя класса, который будет создан для рендеринга эталонной страницы. Это может быть любой допустимый для класса идентификатор, не уточненный именем пространства имен. По умолчанию класс страницы с именем simple.master называется ASPsimple_master CodeFile URL файла, содержащего связанный с эталонной страницей программный код Inherits Класс отделенного кода, наследуемый эталонной страницей. Это может быть любой класс, производный от MasterPage MasterPageFile Имя файла эталонной страницы, на которую ссылается данная эталонная страница. Последняя может ссылаться на другую эталонную страницу, используя тот же механизм, который обычные страницы используют для ссылки на эталонную. Если этот атрибут установлен, образуется иерархия эталонных страниц
Страница содержимого Необходимо добавить атрибут MasterPageFile в директиву Раgе страницы с указанием имени файла требуемой мастер-таблицы: Чтобы предоставить содержимое для элемента управления ContentPlaceHolder, используется другой специализированный элемент управления, называемый Content. Элемент управления ContentPlaceHolder и элемент управления Content связаны отношением "один к одному". Пример ...
Содержимое по умолчанию Когда мастер-страница определяет элемент управления ContentPlaсeHolder, она может также включать содержимое по умолчанию содержимое, которое будет использовано только в том случае, если страница содержимого не предоставит соответствующий элемент управления Content. Master Pages Website!!! Страницы содержимого не могут использовать только часть содержимого по умолчанию и даже частично не могут его редактировать. Это невозможно потому, что содержимое по умолчанию хранится только на мастер-странице, а не на странице содержимого. В результате вам придется либо использовать содержимое по умолчанию таким, каким оно есть, либо заменить его полностью.
Взаимодействие с классом мастер-страницы Добавление свойства BannerText на мастер-странице SiteTemplate.master.cs : public string BannerText { get { return lblTitleContent.Text; } set { lblTitleContent.Text = value; } } Вариант 1: Обращение к свойству BannerText на любой странице приложения: protected void Page_Load(object sender, EventArgs e) { SiteTemplate master = (SiteTemplate)Master; master.BannerText = "Content Page #1"; }
Вариант 2: Добавить директиву на необходимой странице.aspx : Далее в реализации её кодов.aspx.sc – обратиться к свойству BannerText: protected void Page_Load(object sender, EventArgs e) { Master.BannerText = "Content Page #1"; } Вариант 3: без использования свойств мастер-страницы: protected void Page_Load(object sender, EventArgs e) {... Label lbl = (Label)Master.FindControl("lblTitleContent"); if (lbl != null) { lbl.Text = "Content Page #1"; }