Навигация по сайту в ASP.NET 2.0 - Карта сайта

ОГЛАВЛЕНИЕ


Карта сайта

Вид данной структуры сайта, используемой в примерах, показан в следующем изображении


Программная работа с картой сайта

Карта сайта является набором взаимосвязанных узлов. Каждый узел карты сайта обычно содержит заголовок, указатель ресурса (URL) и описание. Изображение, показанное выше, является примером карты сайта, где каждый блок отражает определенный узел карты сайта. ASP.NET не требует определенного формата карты сайта, хотя, по умолчанию, предлагается использовать XML файл. (особенности использования XML файла мы исследовали в первой части.)

ASP.NET предоставляет класс, названный SiteMap , который подразумевает программный (только для чтения (read-only)) доступ к карте сайта. Данный класс характеризуется  двумя элементами управления, которые мы рассмотрим в данной статье:

  • SiteMapPath - обрабатывает иерархическую навигацию, основываясь на посещенной странице и ее расположении в структуре сайта. В частности, SiteMapPath начинает обработку с узла, возвращенного свойством SiteMap.CurrentNode, и продвигается вверх по иерархии, пока не достигнет корня.
  • SiteMapDataSource - данный элемент управления создает иерархический источник данных, который отражает структуру карты сайта. Для того чтобы отобразить информацию карты сайта в других элементах управления, таких как TreeView или Menu, элементы управления не осуществляют запрос к карте сайта напрямую; вместо этого они привязаны к конкретному элементу SiteMapDataSource, который обрабатывает чтение в структуре карты сайта. (Мы детально рассмотрим элемент управления SiteMapDataSource в следующих статьях.)

Данный класс SiteMap обладает двумя родственными свойствами: RootNode и CurrentNode. Оба эти свойства возвращают экземпляры SiteMapNode. Класс SiteMapNode является узлом, определенным в карте сайта, и обладает свойствами, описывающими узел - Title, Url, Description, а также свойствами, которые позволяют программно перемещаться по иерархии - ParentNode, ChildNodes, NextSibling, PreviousSibling, и т.д..

Вы можете использовать класс SiteMap в ваших собственных страницах ASP.NET. Для примера: мы можем вывести ссылки "Следующая" (Next), "Предыдущая" (Previous) и "Вверх" (Up) на каждой странице, путем добавления трех элементов управления HyperLink на мастер-страницу сайта, наряду с небольшим куском кода, который проверяет на присутствие NextSibling, PreviousSibling или ParentNode в CurrentNode. В частности, вы добавляете следующую разметку в вашу мастер-страницу:

<asp:HyperLink ID="lnkPrev" runat="server">Prev</asp:HyperLink>
<asp:HyperLink ID="lnkUp" runat="server">Up</asp:HyperLink>
<asp:HyperLink ID="lnkNext" runat="server">Next</asp:HyperLink>

Обработчик события Page_Load мастер-страницы должен выглядеть так:

        If SiteMap.CurrentNode IsNot Nothing Then     'Set the next/previous/up links 
            If SiteMap.CurrentNode.PreviousSibling IsNot Nothing Then
                lnkPrev.NavigateUrl = SiteMap.CurrentNode.PreviousSibling.Url
                lnkPrev.Text = "&lt; Prev (" & SiteMap.CurrentNode.PreviousSibling.Title & ")"
            Else : lnkPrev.NavigateUrl = String.Empty
                lnkPrev.Text = "&lt; Prev"
            End If
            If SiteMap.CurrentNode.ParentNode IsNot Nothing Then
                lnkUp.NavigateUrl = SiteMap.CurrentNode.ParentNode.Url
                lnkUp.Text = "Up (" & SiteMap.CurrentNode.ParentNode.Title & ")"
            Else : lnkUp.NavigateUrl = String.Empty
                lnkUp.Text = "Up"
            End If
            If SiteMap.CurrentNode.NextSibling IsNot Nothing Then
                lnkNext.NavigateUrl = SiteMap.CurrentNode.NextSibling.Url
                lnkNext.Text = "(" & SiteMap.CurrentNode.NextSibling.Title & ") Next &gt;"
            Else : lnkNext.NavigateUrl = String.Empty
                lnkNext.Text = "Next"
            End If
        End If

Это добавит три гиперссылки (Next, Up, и Previous) на каждую страницу, унаследовавшую мастер-страницу.