MvcSitemapProvider - добавляет значение, которое игнорируется в преобразователе URL
У меня есть ссылка в моем URL-списке, который включает в себя динамические идентификаторы, т.е.
/ Контроллер / действие / идентификатор
В настоящее время нет необходимости иметь, например, для каждой из моих страниц собственную хлебную крошку, лучше было бы вернуться к хлебной крошке действия индекса или просто установить родительский разрешающий URL.
Есть ли простое решение или какие-либо советы, как решить эту проблему?
заранее спасибо
1 ответ
Есть 2 способа использовать "id" или любое другое значение маршрута с MvcSiteMapProvider.
1. Создайте узел для каждого "id" (обычно это делается с помощью реализации DynamicNodeProviderBase). Это дает вам отношение 1 к 1 между значением "id" и узлом. Используйте этот метод, если у вас < 10000 узлов, и вы хотите, чтобы все они были проиндексированы поисковыми системами.
<mvcSiteMapNode title="Product 1" controller="Product" action="Details" id="1"/>
<mvcSiteMapNode title="Product 2" controller="Product" action="Details" id="2"/>
<mvcSiteMapNode title="Product 3" controller="Product" action="Details" id="3"/>
2. Создайте отдельный узел, чтобы соответствовать всем значениям "id", установив preservedRouteParameters="id" на узле. Это даст вам отношение 1 к 1 между именем параметра маршрута "id" (значение не имеет значения) и узлом. Это работает только для крошки; для конечных точек Menu, SiteMap и /sitemap.xml вам потребуется использовать поставщик видимости, а также атрибут SiteMapTitle, чтобы исправить отображение пользовательского интерфейса. Используйте этот метод для страниц администрирования, которые редактируют данные и никогда не будут видны поисковым системам.
<mvcSiteMapNode title="Product 1" controller="Product" action="Details" preservedRouteParameters="id"/>
Обратите внимание, что вы также можете комбинировать оба метода на одном узле, если у вас несколько параметров. Если, например, у вас есть специфичный для пользователя параметр userId, о котором поисковым системам никогда не понадобится знать, вы можете уменьшить количество узлов (обычно вам нужно предоставить узел для [всех значений "id")] X [все "userId" значения] - то есть общее число узлов будет равно произведению всех возможных комбинаций значений) в SiteMap, всегда сопоставляя "userId", но по-прежнему индексируя все продукты.
<mvcSiteMapNode title="Product 1" controller="Product" action="Details" id="1" preservedRouteParameters="userId"/>
<mvcSiteMapNode title="Product 2" controller="Product" action="Details" id="2" preservedRouteParameters="userId"/>
<mvcSiteMapNode title="Product 3" controller="Product" action="Details" id="3" preservedRouteParameters="userId"/>
Также обратите внимание, что вам не нужно использовать XML для использования этих методов - они также работают при объявлении узлов другими способами.
В моем блоге есть полная статья, описывающая каждый из этих методов с загружаемыми рабочими примерами: Как заставить MvcSiteMapProvider запомнить позицию пользователя.