Спонсор: Microsoft
Опубликован: 14.11.2006 | Доступ: свободный | Студентов: 5844 / 513 | Оценка: 4.18 / 3.74 | Длительность: 16:37:00
ISBN: 978-5-9556-0085-7
Лекция 12:

Шаблоны дизайна страниц ASP .NET

< Лекция 11 || Лекция 12: 1234 || Лекция 13 >

Теперь нужно создать страницу содержания. Она создается как обычно, только отмечается флажок с надписью Select Master Page. Появляется диалог, в котором необходимо выбрать шаблон страницы:

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" 
AutoEventWireup="true" CodeFile="MainSchool.aspx.cs" 
Inherits="MainSchool" Title="Untitled Page" %>

Атрибут MasterPage директивы Page определяет шаблон дизайна, или эталонную страницу данной страницы.

Возможно настроить приложение так, чтобы все страницы наследовали одну страницу шаблона дизайна. В конфигурационном файле в секцию System.web нужно вставить элемент:

<pages masterPageFile="~/ MasterPage.master " />

Но и в этом случае назначение главной страницы в директиве Page имеет приоритет над назначением на уровне приложения. Установка web.config действует на тех страницах, в которых masterPageFile не указан, но определены элементы управления Content. Эта установка не действует на обычные aspx-страницы.

Шаблон можно назначить не всем страницам, а выборочно, например, расположенным в определенной папке приложения:

<location path="Lections">
    <system.web>
      <pages masterPageFile="~/Lections.master" />
    </system.web>

Элемент location вставляется в главный узел configuration. Здесь указано, что все страницы из папки Lections используют шаблонную страницу Lections.master.

На странице-наследнице шаблона могут быть только элементы типа Content, каждый из которых соответствует одному элементу ContentPlaceHolder шаблона. Нельзя вставлять содержание вне этих элементов, иначе ASP .NET не сможет объединить главную страницу со страницей содержания. Идентификатор ContentPlaceHolder должен совпадать с атрибутом ContentPlaceHolderID соответствующего элемента Content:

<asp:Content ID="Content1" 
ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" 
ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server">
</asp:Content>

Программа создала дочернюю страницу с двумя элементами управления Content. Если переключиться на вкладку Design, эти два элемента Content будут показаны в виде пустых прямоугольников, расположенных рядом друг с другом, так как в шаблоне они находятся в двух соседних ячейках таблицы. Директива Page отличается от обычной, кроме атрибута MasterPageFile, наличием атрибута Title. Так как теги <head>, <title>, <body> наследуются из файла шаблона, это единственная возможность переопределить заголовок браузера. Заменим значение атрибута:

Title="Главная"

Если посмотреть на результирующую страницу в браузере, увидим, что заголовок браузера отразил изменение. В HTML-коде страницы записано

<title>
	Главная
</title>

На самой странице отображается только содержание, заданное в странице шаблона.

Шаблон можно в любой момент отредактировать, и изменения отразятся на всех производных страницах. Например, добавим картинку перед текстом заголовка:

<img src=" images/ASPdotNET_logo.jpg" />

(Ее можно найти в установке .NET "Microsoft.NET\Framework\ v2.0.xxx\ASP.NETWebAdminFiles\Images)

Дочерняя страница в браузере теперь выглядит так:


Рис. 12.1.

Содержание страницы должно быть строго внутри элементов Content. В один из них можно поместить, например, картинку, а во второй — текст:

<asp:Content ID="Content1" 
ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
  <asp:Image ID="Image1" runat="server"  
ImageUrl="Images/photo_home_01.jpg" />
</asp:Content>
<asp:Content ID="Content2" 
ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server">
  Вы решили изучить ASP.NET?<br /></asp:Content>

Преимущество технологии ASP.NET перед остальными состоят в высокой степени абстракции, построенной над стандартным HTML-кодом: применение объектно-ориентированной парадигмы, поддержка нескольких языков программирования, наличие универсального основания, содержащего тысячи уже готовых для использования в проектах решений — Microsoft .NET Framework.

<br />
  <asp:HyperLink ID="HyperLink1" runat="server"  
NavigateUrl="Voting.aspx">Дальше</asp:HyperLink>
</asp:Content>

Есть еще один способ поменять заголовок браузера программно. У страницы, имеющей шаблон, есть свойство Master. Конечно, оно есть у всех страниц, но у обычных страниц оно равно Null. Через него можно обращаться ко всем свойствам главной страницы. Это свойство только для чтения.

public MasterPage Master { get; }

public partial class MainSchool : System.Web.UI.Page
{
    protected void Page_LoadComplete(object sender, EventArgs e)
    {
      Master.Page.Title = "Школа веб-программирования";
    }
< Лекция 11 || Лекция 12: 1234 || Лекция 13 >
Алексей Савельев
Алексей Савельев

https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx

Денис Прокофьев
Денис Прокофьев

Везде написано, что это самый независимый и простой в использовании навигационный элемент управления, что он работает сразу с web.sitemap и не требует определения SiteMapDataSource.

Моя карта сайта состоит из двух страниц, вложенных друг в друга. asp:Menu, asp:TreeView отбображаются как ожидалось, а вот asp:SiteMapPath - нет. Он не виден нигде. Однако на его месте формируется разметка: <span id="SiteMapPath1"><a href="#SiteMapPath1_SkipLink" style="position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden;">Проход по ссылкам навигации</a><a id="SiteMapPath1_SkipLink"></a></span> - т.е. элемент отрабатывает.

В словах xHTML это выглядит так: <asp:SiteMapPath ID="SiteMapPath1" runat="server" />. Причем не важно - внутри тега form или снаружи - всегда одинаково.

Т.к. другие нав. ЭУ работают через простой источник данных без ошибок, делаю вывод - карта составлена правильно. ИД: <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />

Карта: <?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode url="~/L11_1_simplePage.aspx" title="Страница 1"  description="Простая страница 1." >
    <siteMapNode url="~/L11_1SimplePage2.aspx" title="Страница 2"  description="Простая страница 2" />
  </siteMapNode>
</siteMap>

Почему так происходит? Вроде делаю все по примерам. VS Community 2015. NetFramework в проекте: v4.0.30319

Галина Федорова
Галина Федорова
Россия, Санкт-Петербург