SiteMapPath - передача параметров через маршрутизацию и строку запроса

Я использую MVCSiteMapProvider 4.6.7 в проекте ASP.NET MVC 5. У меня есть это в mvc.sitemap файл:

<mvcSiteMapNode title="UserManager" controller="User" action="Index">
      <mvcSiteMapNode title="UserAdd" controller="User" action="Create"/>
      <mvcSiteMapNode title="UserEdit" controller="User" action="Edit" 
                       preservedRouteParameters="id"
                      key="User_Edit"/>
      <mvcSiteMapNode title="UserView" controller="User" action="Details"/>
</mvcSiteMapNode>

Я показываю путь к карте сайта следующим образом:

<div id="breadcrumbNav">
   @Html.MvcSiteMap().SiteMapPath()
</div>

Когда я перехожу к http://siteurl/User/Edit/2отображается путь к карте сайта, но при переходе к http://siteurl/User/Edit?id=2, это не.

Удаление preservedRouteParameters="id" обратная ситуация (карта сайта отображается с .../Edit?id=2, но не с .../Edit/2)

Есть ли способ заставить их обоих работать?

1 ответ

Решение

Это было связано с ошибкой, которая была исправлена ​​в v4.6.10 (спасибо за отчет).

Проблема заключается в том, что "id" указывается в качестве необязательного значения маршрута, и в этом случае MVC автоматически генерирует значение маршрута с "id/null", когда "id" не указывается в качестве значения маршрута в URL-адресе. Поскольку при поиске "текущего" узла значения маршрута имеют приоритет над значениями строки запроса, в этом случае значение маршрута не перезаписывалось. Исключение было добавлено для этого конкретного случая в v4.6.10, чтобы перезаписать значения маршрута, которые являются пустыми, таким образом, сопоставление будет выполнено со значением строки запроса вместо пустого значения маршрута.

После обновления, используя preservedRouteParameters="id" будет совпадать в обоих случаях, и будут показаны хлебные крошки.