Я использую MvcSiteMapProvider
для создания хлебных крошек, и у меня возникают проблемы с сопоставлением узлов с новой функцией. Мы используем области MVC5 и последние библиотеки MvcSiteMapProvider.MVC5
. Мы используем i18n
с Resx
файлами, наш атрибут title
является ключом. URL-адреса наших страниц не меняются после выпуска, поэтому используйте стандартную конфигурацию XML.
Мы используем маршрутизацию на основе атрибутов MVC5.
Действие List
является действием по умолчанию как для домашнего контроллера, так и для области, так же как и на маршруте Store/
. Работает нормально, совпадение установлено.
Маршрут Search
действия Store/Search
не соответствует узлу.
Конфигурация
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">
<mvcSiteMapNode controller="Dashboard" action="Index" title="Foobar" key="Bar">
<!-- quite a large file -->
<mvcSiteMapNode area="Store" controller="Home" action="List" title="SiteMap_DocumentStore_Home_List" preservedRouteParameters="page, itemsPerPage, msg">
<mvcSiteMapNode area="Store" controller="Home" action="Search" title="SiteMap_DocumentStore_Search" preservedRouteParameters="tags, page"/>
<!-- snip extra entries -->
</mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMap>
Я ценю, что могу удалить атрибуты area
и controller
из mvcSiteMapNode
дочерних элементов List
. Я оставил их здесь для полноты картины.
Домашний контроллер
[RouteArea("Store")]
[Route("{action=list}")]
public class HomeController : Controller
{
[Route("{page?}/{itemsPerPage?}")]
public ActionResult List(int page = 1, int itemsPerPage = -1, string msg = "")
{}
[Route("Search/{tags?}/{page?}")]
public ActionResult Search(string tags = "", int page = 1)
{}
}
Расследование
У меня есть ощущение, что это как-то связано с маршрутом MVC для действия List
, которое пусто. Если я изменю маршрут List
на:
[Route("List/{page?}/{itemsPerPage?}")]
public ActionResult List(int page = 1, int itemsPerPage = -1, string msg = "")
{}
Тогда узел поиска будет соответствовать, как и его братья и сестры (которые я вырезал)
Изменить – упростить маршрутизацию
Я удалил маршрут по умолчанию для контроллера [Route("{action=list}")]
. Проблема все еще сохраняется.