Опубликован: 07.05.2010 | Доступ: свободный | Студентов: 1678 / 62 | Оценка: 4.56 / 4.06 | Длительность: 34:11:00
Лекция 9:

Средства форматирования страниц

Многослойное подключение мастер-страниц

Принципиально возможно подключение одной мастер-страницы к другой - ASP.NET это позволяет. Можно использовать столько уровней вложения мастер-страниц, сколько это необходимо. Но нужно иметь ввиду, что многокаскадная схема подключения мастер-страниц делает код запутанным и ненадежным, поэтому рекомендуется использовать только один уровень мастер-страниц. К тому же, режим Design оболочки работает только для мастер-страницы верхнего уровня, а для уровней мастер-страниц большей глубины дескрипторный код нужно будет писать вручную.

Но мы, все-таки, рассмотрим эту возможность на примере мастер-страниц двух уровней. Мы создадим две мастер-страницы с последовательным подключением нижнего уровня Level1 к верхнему Level0.

  • Создайте в корне Web-дерева мастер-страницу нижнего уровня с именем MasterPageLevel1.master
  • Код страницы сделайте таким
    <%@ Master Language="C#" %>
        
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div style="text-align: center; color: #0000ff">
                <h1>
                    Мастер-страница уровня Level1 - наибольшей глубины. 
                    Ее можно использовать как верхний колонтитул
                </h1>
                <asp:ContentPlaceHolder ID="ContentPlaceHolderLevel1" runat="server">
                </asp:ContentPlaceHolder>
            </div>
        </form>
    </body>
    </html>
  • Теперь создайте мастер-страницу верхнего уровня с именем MasterPageLevel0.master и подключите к ней предыдущую через атрибут MasterPageFile директивы @Master

Код страницы должен выглядеть так

<%@ Master Language="C#" MasterPageFile="~/MasterPageLevel1.master" %>
    
<asp:Content ID="ContentLevel0" ContentPlaceHolderID="ContentPlaceHolderLevel1" runat="server">
    <table width="100%" style="background-color: #ccff00" border="1">
        <tr>
            <td colspan="2">
                <h2>
                    Мастер-страница уровня Level0 - верхнего уровня
                </h2>
            </td>
        </tr>
        <tr>
            <td style="width: 200px">
            <strong>Здесь можно расположить элементы навигации</strong>
            </td>
            <td style="background-color: #ccffff">
                <asp:ContentPlaceHolder ID="ContentPlaceHolderLevel0" runat="server">
                </asp:ContentPlaceHolder>
            </td>
        </tr>
    </table>
</asp:Content>
  • Выполните для страницы MasterPageLevel0.master команду Website/Add Content Page, чтобы создать для нее страницу содержимого
  • Измените имя по умолчанию Default.aspx созданной страницы содержимого на TestMasterPageLevel.aspx и отредактируйте ее так
    <%@ Page Language="C#" MasterPageFile="~/MasterPageLevel0.master" Title="Untitled Page" %>
        
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolderLevel0" runat="Server">
        <strong>Это есть заменяющее содержимое для мастер-страницы верхнего уровня Level0</strong>
    </asp:Content>
  • Назначьте страницу содержимого TestMasterPageLevel.aspx стартовой и исполните ее

Результат будет таким

Итак, все работает, но нам это не надо - слишком запутано и посмотреть в Design нельзя!

Подключение мастер-страницы через конфигурационный файл

Для страниц, которые не имеют подключения мастер-страницы посредством атрибута MasterPageFile, можно задать мастер-страницу по умолчанию в кофигурационном файле блоком

<configuration>
	<system.web>
		<pages masterPageFile="XXX.master" />
	</system.web>
</configuration>

Этот подход не считается надежным, поскольку требует строгого согласования всех страниц содержимого с шаблонами одной мастер-страницы. Как только это условие будет нарушено, появится исключение. Если необходимо применить именно этот вариант, то нужно создать отдельную папку со своим файлом web.config и поместить в нее мастер-страницу и согласованные страницы содержимого

Наши перспективы

Ну вот и приплыли, граждане студенты. До сих пор я писал изложение, а вы его читали. Теперь вы будете писать сочинение, а я его буду смотреть в аттестационную и зачетную недели! Отсюда вам мой наказ (читай "Указ!"):

  1. На занятия можете не ходить - это ваше личное дело, но знать данный материал вы обязаны (если я ошибаюсь - спросите у декана). Это уже вопрос государственной безопасности! (чтобы перед Большим Биллом не краснеть)
  2. Сочинение будете писать на вольную тему в виде взаимосвязанных активных страниц на ASP.NET 2.0
  3. Сегодня (беру слепок сверху) 19.03.2009 11:51 и материала для вас уже изложено достаточно, чтобы приступить к работе
  4. Ни один не получит зачет (я не боюсь директор магазин, товаровед, завсклад), пока не представит приличный сайт на вольную тему (мне еще темы сочинять не хватало!)
  5. Просто статические страницы не пойдут, должен быть код с приличной функциональностью
  6. Дизайн и графика большого значения не имеет, хотя настраивать стиль нужно
  7. Все, что я знаю и умею по этому средству, должны знать и уметь вы. А то какое-то неравенство и стыд получается!
  8. Пора и власть употребить
  9. Как говорил наш шеф, куй железо не отходя от кассы
  10. Как гласит народная мудрость, время - деньги; не расчитывай на деньги, если нет времени!