Навигация по сайту в ASP.NET 2.0 - Отображаем иерархическую навигацию при помощи элемента управления SiteMapPath
ОГЛАВЛЕНИЕ
Отображаем иерархическую навигацию при помощи элемента управления SiteMapPath
Элемент управления SiteMapPath отображает иерархическую навигацию, оповещая пользователя об их расположении на сайте. Результат элемента управления SiteMapPath определяется тремя факторами:
- Структурой сайта, определенной картой сайта,
- Посещаемой страницей
- Значением свойств элемента управления SiteMapPath
Когда посещается страница с элементом управления SiteMapPath, данный элемент пытается сопоставить страничный URL со значением указателя ресурса узла сайта, определенного в карте сайта. Если нет совпадений - элемент продвигается вверх по структуре к корню, создавая следующее: RootNode > ParentNode > ... > ParentNode > CurrentNode. Здесь CurrentNode является заголовком узла карты сайта, который сравнивается с указателем ресурса (URL) запроса текущей страницы; RootNode и ParentNodes обрабатываются как гиперссылки в том случае, если узел карты сайта обладает значением URL. Элемент управления SiteMapPath на странице History раздела Books (Books/History.aspx) обрабатывается как Home > Books > History, при этом Home и Books обрабатываются как ссылки на Default.aspx и Books/Default.aspx соответственно. Посещение страницы Books/Default.aspx, SiteMapPath обрабатывает просто как Home > Books.
Результат работы SiteMapPath зависит от карты сайта и посещенной страницы. Результат работы SiteMapPath может также быть настроен при помощи свойств элемента. Существуют три стандартных форматирующих свойства - BackColor, Font, ForeColor, - а также и другие настройки SiteMapPath, такие как:
- PathDirection - может иметь одно или два значения - RootToCurrent (по умолчанию) или CurrentToRoot. При помощи RootToCurrent иерархическая навигация на странице History раздела Books обрабатывается как Home > Books > History; при помощи CurrentToRoot результатом будет History > Books > Home.
- PathSeparator - указывает строку, используемую для отделения каждого узла в иерархической навигации; по умолчанию >
- RenderCurrentNodeAsLink - логическое свойство (Boolean), которое указывает на то, стоит ли обрабатывать CurrentNode как ссылку; по умолчанию - False.
- ParentLevelsDisplayed - целочисленное значение которое может быть установлено в предел отображаемой иерархии. По умолчанию, данное свойство установлено в значение -1, тем самым означая, что не существует предела; установка значения в 1 на странице History в результате даст обработку иерархии Books > History. Home не включается, так как элемент управления SiteMapPath проходит максимум через один родительский уровень - от History к Book.
- ShowToolTips - если узел карты сайта имеет значение описания (description), описание отображается как подсказка для каждого узла иерархии в случае, если данное свойство установлено в True (по умолчанию).
Также существуют свойства стиля для настройки BackColor, Font, ForeColor и т.д., для различных частей элемента SiteMapPath. Свойство NodeStyle может быть использовано для настройки внешнего вида узлов и иерархической навигации; RootNodeStyle и CurrentNodeStyle могут быть использованы для последующей настройки первого и последнего узлов в иерархии. Часто простейшим и наиболее практичным методом форматировать элемент управления SiteMapPath может быть использование его мастера Auto Format, который можно применить, используя смарт-тэг элемента управления.
Настраиваем обработанный результат при помощи шаблонов
Элемент SiteMapPath содержит четыре шаблона, которые позволяют последующую настройку результата обработки. Шаблоны позволяют смешивать HTML разметку , веб-элементы управления и синтаксис привязки данных (DataBinding); если вы раньше использовали элементы управления DataList или Repeater, то вы уже должны быть знакомы с шаблонами. Шаблоны в ASP.NET 2.0 по существу являются такими же, как и шаблоны в ASP.NET 1.x, за исключением того, что ASP.NET 2.0 использует более новый и насыщенный синтаксис выражений привязки данных. Например, в ASP.NET 1.x вам нужно было использовать синтаксис <%# DataBinder.Eval(Container.DataItem, PropertyName) %> для того, чтобы получить значение из колонки. В ASP.NET 2.0 данный старый синтаксис работает, но вы также можете использовать и более короткий вариант, <%# Eval(PropertyName) %>.
По умолчанию: SiteMapPath обрабатывает корневой и родительский узлы как гиперссылки, следовательно, когда пользователь нажимает на ссылку, его моментально переносит вверх по иерархии. Тем не менее, вам может понадобиться некоторая обработка на сервере до того, как вы перенесете пользователя в требуемое место – может, вы хотите сохранить информацию о перемещении пользователя, либо автоматически сохранить изменения, сделанные на странице. Такая функциональность может быть достигнута при помощи шаблонов и обработки узла в качестве LinkButton.
Например, если вы хотели обработать всего лишь корневой узел, принадлежащий SiteMapPath, как LinkButton, вы можете добавить <RootNodeTemplate> к элементу SiteMapPath вместе со следующей разметкой:
<asp:SiteMapPath ID="SiteMapPath1" runat="server">
<RootNodeTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" Text='<%# Eval("title") %>'
CommandArgument='<%# Eval("url") %>'
OnCommand="LinkButton1_Command">
</asp:LinkButton>
</RootNodeTemplate>
</asp:SiteMapPath>
Данная разметка добавит элемент LinkButton к SiteMapPath, чье свойство Text назначено соответствующему свойству Title в SiteMapNode. При нажатии на LinkButton вызывается постбэк и событие Command элемента, тем самым вызывая обработчик события LinkButton1_Command. Свойство Url в SiteMapNode передается данному обработчику события при помощи свойства CommandArgument. В обработчике события вы можете выполнить все то, что было необходимо сделать при обработке на сервере и затем, после этого, перенести пользователя на страницу, запрашиваемую путем Response.Redirect(e.CommandArgument).