Навигация по сайту
Программное управление картой сайта
Узлы карты сайта имеют множество свойств, в том числе свойства Url, Title и Description. Именно эти основные свойства и создает мастер оболочки в файле Web.sitemap. Если узел имеет атрибут Url, то пользователь щелчком на нем может переходить к связанной странице. Если в каком-то узле атрибут Url опустить, то узел по-прежнему будет отображаться в иерархии дерева, но не будет действовать как гиперссылка.
До сих пор мы рассматривали взаимодействие с картой сайта без кода. Но это взаимодействие можно осуществлять и программно. В классе SiteMap, представляющем карту в целом, основные статические свойства RootNode и CurrentNode содержат ссылки на корневой и текущий узлы карты сайта как экземпляры класса SiteMapNode. Любой другой произвольный узел, например, "Консультации", можно найти по его URL через класс карты сайта с помощью следующего кода
SiteMapNode findNode = SiteMap.Provider.FindSiteMapNode("~/Consulting.aspx");Далее с помощью свойств ParentNode, ChildNodes, NextSibling и PreviousSibling экземпляров класса SiteMapNode можно получить программный доступ к соседним узлам иерархии карты сайта.
Например, следующий обработчик щелчка кнопки можно использовать для перехода к странице, связанной с родительским, по отношению к текущему, узлом
Response.Redirect(SiteMap.CurrentNode.ParentNode.Url);
Модифицируем наше приложение так, чтобы динамически извлекать информацию из текущего узла карты сайта и отображать ее на странице.
-
Добавьте
в мастер-странице MasterPage.master к таблице
сверху еще одну строку с объединенными столбцами и разместите
в ней из панели Toolbox последовательно две текстовых метки Label с
именами lblTitle и lblDescription.
Код этого фрагмента будет таким
<tr>
<td colspan="2" style="text-align: center">
<asp:Label ID="lblTitle" runat="server" />
:
<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="< Назад" />
<asp:LinkButton ID="lnkNext" runat="server" Text="Вперед >" />
</td>
</tr>-
Добавьте
в блок скриптов обработчик Page_Load(), содержащий следующий
код
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;
}-
Запустите
приложение и убедитесь, что появилась новая функциональность
перехода на родственный узел карты сайта, реализованная нами
программно
Интерфейс пользователя после новых изменений будет таким
Представление пользователю элементов TreeView и Menu можно изменять декларативно с помощью опции Auto Format дополнительной локальной панели задач элемента.
-
Перейдите
в режим Design редактирования страницы MasterPage.master, выделите
элемент TreeView1 и щелкнув
на маркере,
появившемся в правой верхней части элемента, выполните команду Auto Format
-
Подобным
же образом настройте элемент Menu1, выбрав,
например, стиль Colorful
-
Запустите
приложение и убедитесь, что теперь элементы навигации генерируют
более нарядный HTML-код
Если после выполненных настроек стиля элементов навигации посмотреть на их дескрипторный код, то можно отметить, что оболочка существенно дополнила его уточняющими стилевыми дескрипторами.



