Опубликован: 14.11.2006 | Доступ: свободный | Студентов: 5897 / 532 | Оценка: 4.18 / 3.74 | Длительность: 16:37:00
ISBN: 978-5-9556-0085-7
Лекция 11:

Навигация по сайту

< Лекция 10 || Лекция 11: 12345 || Лекция 12 >

Элемент управления SiteMapPath

Подобную панель, которая показывает путь от главной страницы к текущей, часто называют breadcrumb ("хлебные крошки"):

MSDN Home > ASP.NET Developer Center > Reference > Using ASP.NET Controls

Вероятно, это связано со сказкой о Мальчике-с-Пальчик, который бросал хлебные крошки по пути в лес, чтобы найти путь домой. Пользователь большого и сложного web-узла тоже должен знать, где он находится, и не потеряться в лабиринте. Поэтому можно назвать этот элемент еще и нитью Ариадны. Он состоит из последовательности гиперссылок на все вышестоящие узлы сайта. Текущая страница отображена простым текстом. Эту настройку можно изменить, установив свойство RenderCurrentNodeAsLink в True.

Для того чтобы на странице работал этот элемент, даже не нужно источника данных. Он автоматически читает карту сайта из файла Web.sitemap. Достаточно просто перетащить его на страницу. Имеются 4 свойства стиля, каждый из которых задается отдельно: для корневого элемента, для разделителя, обычного узла и текущего узла. У SiteMapPath имеется такая же возможность автоформатирования, как и у многих других элементов управления.

Свойство PathDirection позволяет изменить направление от корня к текущей странице на обратное. Например, если путь у вас был таким:

Главная : Игра : Таблица,

то после изменения значения PathDirection на CurrentToRoot станет таким:

Таблица : Игра : Главная

Текстовый атрибут PathSeparator задает разделитель между узлами. Например, в первом примере это " > ", который ставится по умолчанию, а во втором " : ". Пробелы здесь существенны. Похожие атрибуты были и в календаре — к примеру NextMonthText. Для того чтобы задать изображения, в качестве разделителя можно использовать шаблон PathSeparatorTemplate:

<asp:SiteMapPath ID="SiteMapPath1" runat="server">
     <PathSeparatorTemplate>
       <asp:Image ID="Image1" runat="server" ImageUrl="img/fold-
   er.gif" />
     </PathSeparatorTemplate>
   </asp:SiteMapPath>

Свойство ParentLevelsDisplayed позволяет ограничить количество отображаемых родительских узлов. Если оно равно - 1 (по умолчанию), то показываются все узлы.

Если подержать курсор мыши над элементом, появится подсказка, текст которой берется из атрибута description соответствующего узла карты сайта. Отключить отображение подсказки можно с помощью свойства ShowToolTips="false".

Всего имеется 4 шаблона: PathSeparatorTemplate, NodeTemplate, RootTemplate и CurrentNodeTemplate, с помощью которых можно вставлять любые элементы управления в различные части SiteMapPath. Для каждой из частей можно определить и собственный стиль.

SiteMapDataSource

Источник данных SiteMapDataSource работает с помощью провайдера SiteMapProvider. Этот источник данных не поддерживает кэширование, как другие. Он может быть связан только с файлом карты сайта.

В простейшем виде объявляется так:

<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />

Свойство ShowStartingNode определяет, будет ли элемент читать корневой узел карты сайта. Если свойство не установлено, то в коллекцию узлов попадут только дочерние элементы корневого узла.

StartFromCurrentNode =False задает возможность читать только узлы, начиная с текущей страницы.

Свойство FlatDepth задает количество уровней вложенности, которое читается из карты сайта. По умолчанию это - 1, то есть читаются все доступные уровни.

SiteMapProvider может быть полезным при написании собственных провайдеров карты сайта.

SiteMapViewType определяет форму представления узлов. По умолчанию это Tree. Если значение равно Path, то будет читаться путь между корневым узлом и текущим, как в элементе управления SiteMapPath.

< Лекция 10 || Лекция 11: 12345 || Лекция 12 >
Алексей Савельев
Алексей Савельев

https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx

Денис Прокофьев
Денис Прокофьев

Везде написано, что это самый независимый и простой в использовании навигационный элемент управления, что он работает сразу с web.sitemap и не требует определения SiteMapDataSource.

Моя карта сайта состоит из двух страниц, вложенных друг в друга. asp:Menu, asp:TreeView отбображаются как ожидалось, а вот asp:SiteMapPath - нет. Он не виден нигде. Однако на его месте формируется разметка: <span id="SiteMapPath1"><a href="#SiteMapPath1_SkipLink" style="position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden;">Проход по ссылкам навигации</a><a id="SiteMapPath1_SkipLink"></a></span> - т.е. элемент отрабатывает.

В словах xHTML это выглядит так: <asp:SiteMapPath ID="SiteMapPath1" runat="server" />. Причем не важно - внутри тега form или снаружи - всегда одинаково.

Т.к. другие нав. ЭУ работают через простой источник данных без ошибок, делаю вывод - карта составлена правильно. ИД: <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />

Карта: <?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode url="~/L11_1_simplePage.aspx" title="Страница 1"  description="Простая страница 1." >
    <siteMapNode url="~/L11_1SimplePage2.aspx" title="Страница 2"  description="Простая страница 2" />
  </siteMapNode>
</siteMap>

Почему так происходит? Вроде делаю все по примерам. VS Community 2015. NetFramework в проекте: v4.0.30319