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

Карты сайта

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

Программное управление картой сайта

Как мы знаем, узлы карты сайта имеют, в том числе, свойства Url, Title и Description. Именно эти основные свойства и создает мастер оболочки в файле Web.sitemap. Если узел имеет атрибут Url, то пользователь щелчком на нем может переходить к связанной странице. Если в каком-то узле атрибут Url опустить, то узел по-прежнему будет отображаться в иерархии дерева, но не будет действовать как гиперссылка.

До сих пор мы рассматривали взаимодействие с картой сайта без кода. Но это взаимодействие можно осуществлять и программно. В классе SiteMap, представляющем карту в целом, основные статические свойства RootNode и CurrentNode содержат ссылки на корневой и текущий узлы карты сайта как экземпляры класса SiteMapNode. Любой другой произвольный узел, например, "Консультации", можно найти по его URL таким кодом

SiteMapNode findNode = SiteMap.Provider.FindSiteMapNode("~/Consulting.aspx");

Далее с помощью свойств ParentNode, ChildNodes, NextSibling и PreviousSibling экземпляров класса SiteMapNode можно получить программный доступ к соседним узлам иерархии карты сайта.

Некоторые свойства класса SiteMapNode
Свойство Описание
ParentNode Содержит ссылку на родительский по отношению к текущему (найденному) узел. В корневом узле возвращается null - ссылка
ChildNodes Содержит ссылку на коллекцию дочерних узлов
HasChildNodes Булево свойство, возвращающее true, если узел имеет дочерние узлы, иначе, false, если это лист дерева
PreviousSibling Возвращает ссылку на предыдущий узел того же уровня (родственный узел), иначе null, если этот узел единственный. Родственными называются узлы, имеющие одного и того же родителя
NextSibling Возвращает ссылку на следующий родственный узел, иначе null, если этот узел единственный

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

Response.Redirect(SiteMap.CurrentNode.ParentNode.Url);

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

  • Добавьте в мастер-странице MasterPage.master к таблице сверху еще одну строку с объединенными столбцами и разместите в ней последовательно две текстовых метки Label с именами lblTitle и lblDescription. Код этого фрагмента будет таким
    <tr>
        <td colspan="2" style="text-align: center">
            <asp:Label ID="lblTitle" runat="server" />
            : &nbsp;
            <asp:Label ID="lblDescription" runat="server" />
        </td>
    </tr>
  • Добавьте в мастер-странице MasterPage.master к таблице снизу еще одну строку с объединенными столбцами и разместите в ней последовательно два элемента LinkButton с именами lnkPrevious и lnkNext. Код этого фрагмента будет таким
    <tr>
        <td colspan="2" style="text-align: center">
            <asp:LinkButton ID="lnkPrevious" runat="server" Text="< Назад" />
            &nbsp;&nbsp;&nbsp;
            <asp:LinkButton ID="lnkNext" runat="server" Text="Вперед >" />
        </td>
    </tr>
  • Добавьте в блок скриптов следующий код
    protected void Page_Load(object sender, EventArgs e)
    {
        // Информация о текущем узле
        lblTitle.Text = SiteMap.CurrentNode.Title;
        lblDescription.Text = SiteMap.CurrentNode.Description;
    
        // Управление кнопкой "Назад"
        if (SiteMap.CurrentNode.PreviousSibling != null)
        {
            lnkPrevious.PostBackUrl = SiteMap.CurrentNode.PreviousSibling.Url;
            lnkPrevious.Enabled = true;
        }
        else
            lnkPrevious.Enabled = false;
    
        // Управление кнопкой "Вперед"
        if (SiteMap.CurrentNode.NextSibling != null)
        {
            lnkNext.PostBackUrl = SiteMap.CurrentNode.NextSibling.Url;
            lnkNext.Enabled = true;
        }
        else
            lnkNext.Enabled = false;
    }
  • Запустите приложение и убедитесь, что появилась новая функциональность и все работает!!!

Интерфейс пользователя после новых изменений будет таким

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