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"
будет совпадать в обоих случаях, и будут показаны хлебные крошки.