Вопрос

У меня есть вопрос, похожий на тот, который описан здесь:
Маршрутизация URL-адресов ASP.NET с помощью веб-форм - Использование SiteMap

В моем веб-приложении ASP.Net WebForms есть карта сайта, подобная этому:

родовое слово

Мне нужен URL в следующем формате:
: // host / projects / {company} / {projectno} / Главная
: // host / projects / microsoft / 10 / Home
: // host / projects / microsoft / 11 / Reports
: // хост / проекты / яблоко / 10 / ExtraReports

URL-адрес маршрутизации / projects / {company} / {projectno} / {pagename} к /Pages/{pagename}.aspx.

Моя навигация состоит из TabStrip вверху, который должен содержать Home, Reports и Presentations , и меню слева с их подпунктами (например, при выбранном Home это должно быть: Home, Faq ).

Мои вопросы:

  1. Как правильно обрабатывать повторяющиеся URL-адреса SiteMapNode?

  2. Как запретить TabStrip генерировать URL-адреса, например:: // host / Home и: // host / ExtraReports?
    Мне нужно сохранить текущую компанию и проект без выбора, а карта сайта игнорирует относительные URL-адреса

  3. Элементы управления TabStrip и Menu должны распознавать выбранные элементы, чтобы отображать активный выбор. Какое правильное решение для всего этого?

Это было полезно?

Решение

Потратив на это несколько часов, я думаю, что пришел к хорошему (достаточно :)) решению.

Файл SiteMap
Обратите внимание, что узлы без URL-адреса будут указывать на родительский

Genracodicetagpre

Служебный класс для создания URL
CurrentContext - это статическая ссылка на RequestContext

Genracodicetagpre

События привязки к данным на MasterPage
Навигация - это вкладка Telerik, субнавигация - это меню ASP.Net

Genracodicetagpre

Реализация XmlSiteMapProvider
На данный момент этого решения достаточно, мы рассмотрим его позже, чтобы усовершенствовать его :)

Genracodicetagpre

Другие советы

Zyphax,

Скорее всего, вам придется переписать элементы управления TabStrip и Menu, чтобы учесть ваши маршруты.Это также означает, что вы можете удалить повторяющиеся SiteMapNodes.

Вместо этого вам нужно будет написать некоторый код для обхода дерева SiteMap, чтобы получить самого дальнего предка, который является дочерним элементом домашней страницы.Это метод расширения, который может помочь.

Genracodicetagpre

Использование относительных URL-адресов также поможет ../Presentations , а не /projects/apple/10/Presentations

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top