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

Карты сайта

< Лекция 16 || Лекция 17: 1234 || Лекция 18 >

Навигация с использованием мастер-страниц

Реализуем эту цепочку для нашего примера, в котором для организации механизма навигации применим мастер-страницы.

  • Через контекстное меню панели Solution Explorer добавьте к корню Web-дерева сайта папку с именем MasterPages, в которой разместим шаблон для страниц, определяемых параметром URL узлов дерева карты сайта
  • Выделите папку MasterPages и добавьте в нее файл MasterPage.master командой Website/Add New Item, сбросив флажок создания файла отделенного кода
  • Заполните мастер-страницу MasterPage.master следующим кодом
    <%@ Master Language="C#" %>
        
    <script runat="server">
        
        protected void Page_Init(object sender, EventArgs e)
        {
            if (Session["index"] != null)
            {
                // Восстанавливаем состояние радиосписка
                RadioButtonList1.SelectedIndex = (int)Session["index"];
            }
            else
            {
                RadioButtonList1.SelectedIndex = 0;
            }
            
            SelectedIndexChanged(null, EventArgs.Empty);
        }
        
        protected void SelectedIndexChanged(object sender, EventArgs e)
        {
            if (RadioButtonList1.SelectedIndex == 0)
            {
                TreeView1.Visible = true;
                Menu1.Visible = false;
            }
            else
            {
                TreeView1.Visible = false;
                Menu1.Visible = true;
            }
        
            // Запоминаем состояние радиосписка
            Session["index"] = RadioButtonList1.SelectedIndex;
        }
        
    </script>
        
    <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">
                <h1 style="color: Red">
                    Пример использования карты сайта
                </h1>
                <table border="1" width="100%">
                <tr>
                    <td colspan="2" style="text-align: center; background-color: Silver">
                        <!-- Сюда помещаются элементы управления навигацией -->
                        <asp:SiteMapPath ID="SiteMapPath1" runat="server">
                            <CurrentNodeTemplate>
                                <i><b style="color: Blue">
                                    <asp:Label ID="Label1" runat="server" 
                                               Text='<%# Eval("title") %>'>
                                    </asp:Label>
                                </i></b>
                            </CurrentNodeTemplate>
                        </asp:SiteMapPath>
                    </td>
                </tr>
                    <tr>
                        <td style="width: 250px; vertical-align: top; background-color: Yellow">
                            <!-- Сюда помещаются элементы управления навигацией -->
                            <asp:TreeView ID="TreeView1" runat="server" 
                                          SelectedNodeStyle-Font-Bold="true"
                                          SelectedNodeStyle-Font-Italic="true"
                                          DataSourceID="SiteMapDataSource1" />
                            <asp:Menu ID="Menu1" runat="server" Orientation="Horizontal" 
                                          DynamicMenuItemStyle-BackColor="Yellow"
                                          DataSourceID="SiteMapDataSource1" />
                        </td>
                        <td style="vertical-align: top; background-color: Aqua">
                            <!-- Сюда помещаются страницы, подгружаемые по уникальным URL узлов -->
                            <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server" />
                        </td>
                    </tr>
                </table>
                <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
                <br />
                <asp:RadioButtonList ID="RadioButtonList1" runat="server" AutoPostBack="true" 
                                     OnSelectedIndexChanged="SelectedIndexChanged"
                                     BorderStyle="Solid" BorderColor="Red">
                    <asp:ListItem>Использовать TreeView</asp:ListItem>
                    <asp:ListItem>Использовать Menu</asp:ListItem>
                </asp:RadioButtonList>
            </div>
        </form>
    </body>
    </html>

В приведенном шаблоне мы определили заголовок и таблицу, состоящую из двух строк и двух столбцов. Столбцы верхней строки мы объединили и поместили в нее элемент SiteMapPath отображения пути и текущего положения пользователя из вкладки Navigation панели Toolbox.

В левом столбце таблицы мы разместили элементы отображения карты сайта и управления навигацией TreeView1 и Menu1 из вкладки Navigation панели Toolbox. В правом столбце мы зарезервировали место для загрузки страниц с содержимым, которые по атрибуту ContentPlaceHolderID дескриптора

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

будут ссылаться на это место.

Вслед за таблицей (или в любом другом месте) мы разместили неотображаемый объект источника данных SiteMapDataSource1, который привязали к элементам TreeView1 и Menu1 через его свойство DataSourceID. Ниже разместили список радиокнопок, чтобы дать возможность пользователю менять элементы навигации. Свойства столбцов таблицы настроили так, чтобы содержимое размещалось с самого начала, а в верхней строке - посредине.

В результате получится такой внешний вид мастер-страницы в режиме Design


В блоке скриптов мы организовали механизм сохранения состояния списка между сеансами приложения, а также механизм смены элементов навигации. Как только мы один из элементов навигации скрываем, он перестает генерировать соответствующий HTML-код. В шаблоне CurrentNodeTemplate элемента SiteMapPath мы связали текстовую метку Label с атрибутом title текущего узла карты сайта, определенной в файле Web.sitemap.

Теперь нужно создать сами страницы с содержимым, подгружаемым совместно с шаблоном по щелчкам на узлах дерева карты сайта.

  • В панели Solution Explorer щелкните правой кнопкой мыши на шаблоне MasterPage.master и выполните команду контекстного меню Add Content Page, чтобы создать заготовку страницы содержимого Default.aspx. Повторите это действие, чтобы создать 8 заготовок таких страниц
  • Присвойте этим страницам имена согласно XML-файлу карты сайта Web.sitemap:
    1. Default.aspx
    2. Products.aspx
    3. Hardware.aspx
    4. Software.aspx
    5. Services.aspx
    6. Training.aspx
    7. Consulting.aspx
    8. Support.aspx
  • Отредактируйте содержимое созданных заготовок страниц следующим образом
    Примерное наполнение страниц содержимого
    Default.aspx
    <%@ Page Language="C#" MasterPageFile="~/MasterPages/MasterPage.master" 
                           Title="Untitled Page" %>
        
    <asp:Content ID="Content1" runat="Server" 
                 ContentPlaceHolderID="ContentPlaceHolder1">
        Это содержимое начальной (домашней) страницы Default.aspx, 
        где расположен титульный лист и другие "прибамбасы"
    </asp:Content>
    Products.aspx
    <%@ Page Language="C#" MasterPageFile="~/MasterPages/MasterPage.master" 
                           Title="Untitled Page" %>
        
    <asp:Content ID="Content1" runat="Server" 
                 ContentPlaceHolderID="ContentPlaceHolder1">
        Это содержимое страницы Products.aspx, 
        где расхваливаются товары, которые мы продаем
    </asp:Content>
    Hardware.aspx
    <%@ Page Language="C#" MasterPageFile="~/MasterPages/MasterPage.master" 
                           Title="Untitled Page" %>
        
    <asp:Content ID="Content1" runat="Server" 
                 ContentPlaceHolderID="ContentPlaceHolder1">
        Это содержимое страницы Hardware.aspx, 
        где перечислены компьютеры и комплектующие,
        которыми мы торгуем (спекулируем)
    </asp:Content>
    Software.aspx
    <%@ Page Language="C#" MasterPageFile="~/MasterPages/MasterPage.master" 
                           Title="Untitled Page" %>
        
    <asp:Content ID="Content1" runat="Server" 
                 ContentPlaceHolderID="ContentPlaceHolder1">
        Это содержимое страницы Software.aspx, 
        на которой мы расхваливаем программное обеспечение,
        сворованное у других, но выдаваемое за свое
    </asp:Content>
    Services.aspx
    <%@ Page Language="C#" MasterPageFile="~/MasterPages/MasterPage.master" 
                           Title="Untitled Page" %>
        
    <asp:Content ID="Content1" runat="Server" 
                 ContentPlaceHolderID="ContentPlaceHolder1">
        Это содержимое страницы Services.aspx, 
        на которой мы хвастаемся, что все можем и
        в беде не покинем, а сами только и думаем, 
        как бы обобрать до нитки
    </asp:Content>
    Training.aspx
    <%@ Page Language="C#" MasterPageFile="~/MasterPages/MasterPage.master" 
                           Title="Untitled Page" %>
        
    <asp:Content ID="Content1" runat="Server" 
                 ContentPlaceHolderID="ContentPlaceHolder1">
        Это содержимое страницы Training.aspx, 
        на которой мы популярно объясняем для невежд,
        почему Земля квадратная
    </asp:Content>
    Consulting.aspx
    <%@ Page Language="C#" MasterPageFile="~/MasterPages/MasterPage.master" 
                           Title="Untitled Page" %>
        
    <asp:Content ID="Content1" runat="Server" 
                 ContentPlaceHolderID="ContentPlaceHolder1">
        Это содержимое страницы Consulting.aspx, 
        где мы проводим консультации с нашими клиентами
    </asp:Content>
    Support.aspx
    <%@ Page Language="C#" MasterPageFile="~/MasterPages/MasterPage.master" 
                           Title="Untitled Page" %>
        
    <asp:Content ID="Content1" runat="Server" 
                 ContentPlaceHolderID="ContentPlaceHolder1">
        Это содержимое страницы Support.aspx, 
        на которой мы оказываем поддержку в сопровождении
        программного обеспечения
    </asp:Content>
  • В панели Solution Explorer переместите созданные файлы содержимого из каталога MasterPages в корень сайта
  • Запустите приложение и испытайте его функциональность

Результат для двух вариантов будет примерно таким

Элемент SiteMapPath удобен для отображения текущего положения пользователя в иерархической цепочке, а также для быстрого перемещения вверх к корневому узлу. Но для возможности перемещения вниз по иерархии карты сайта его всегда нужно комбинировать с другими элементами управления навигацией. Вот некоторые свойства, влияющие на внешний вид элемента SiteMapPath

Некоторые свойства класса SiteMapPath
Свойство Описание
ParentLevelsDisplayed Устанавливает длину отображаемой иерархической цепочки. По умолчанию равен -1, означающий, что будут показаны все родительские узлы
PathDirection Устанавливает порядок отображения узлов:
  • RootToCurrent - слева направо от корневого к текущему
  • CurrentToRoot - слева направо от текущего к корневому
PathSeparator Определяет разделитель между отображаемыми узлами. По умолчанию равен символу ">" (больше)
RenderCurrentNodeAsLink При включении в значение true отображает текущий узел как гиперссылку
ShowToolTips Отключает всплывающие подсказки над узлами иерархической цепочки, определяемые значениями атрибута description в описании узлов файла Web.sitemap. По умолчанию имеет значение true - всплывающие подсказки включены
< Лекция 16 || Лекция 17: 1234 || Лекция 18 >