0

Я использую MVC3, C# 4, Razor, MvcSiteMapProvider V4.Проблемы с привязкой узла XML в mvc.SiteMap к маршрутам в global.asa?

Я пытаюсь привязать свои MvcSiteMapNodes в файле mvc.sitemap явно к моим маршрутам в моей global.asa. Но, похоже, это не работает. Без сомнения, я что-то пропустил.

мои маршруты в global.asa:

routes.MapRoute("Report", "Report/{ClientId}", new { controller = "Report", action = "Index", ClientId = UrlParameter.Optional }); 
    routes.MapRoute("Report_Section", "Report/{ClientId}/Section/{ReportId}", new { controller = "Section", action = "FilterByReport", ReportId = UrlParameter.Optional }); 

Часть моего mvc.sitemap:

 <mvcSiteMapNode title="Reports" controller="Report" action="Index" preservedRouteParameters="ClientId" route="Report"> 
    <mvcSiteMapNode title="Sections" route="Report_Section"> 

Так мои 2 URL-адреса являются:

Отчеты Маршрут:

Report/10 

Reports_Sections R Oute:

Report/10/Section/100 

Я не получаю признание на втором маршруте, и, следовательно, крошка след не отображается на соответствующей странице. Я надеялся, просто указав атрибут «route» в mvc.sitemap, mvcSiteMapProvider свяжет эти два.

Мысли. Где я ошибся?

Большое спасибо

EDIT:

Кажется, что мне нужно указать «контроллер» и «действие» в «mvc.sitemap» и «маршрут» сам по себе не будет работать.

  <mvcSiteMapNode title="Sections" controller="Section" action="FilterByReport" route="Report_Section" preservedRouteParameters="ClientId,ReportId"> 

ответ

1

Параметр route предназначен для сужения соответствия конкретному маршруту, а не для соответствия всем маршрутам. Однако просто указать маршрут недостаточно, чтобы совместить его. Вам также необходимо предоставить свое действие, контроллер, (необязательную) область и (необязательные) параметры действия.

Кроме того, чтобы, как представляется, помнить о вашей тропе, вам нужно добавить узел для каждой возможной комбинации ClientID/ReportID в вашу карту сайта. Это можно сделать довольно легко, используя пару DynamicNodeProviders для загрузки ваших данных из базы данных/источника данных. Весь принцип основан на сопоставлении уникального местоположения на карте, и вам нужны эти идентификаторы, чтобы каждый матч был уникальным.

PreservedRouteParameters обычно используется для того, чтобы любой идентификатор соответствовал параметру метода действия в CRUD-операциях. Это дает вам возможность сделать ваши страницы добавления/редактирования/удаления соответствующими идентификатору без регистрации этих идентификаторов в файле Sitemap.

+0

Спасибо вам за это. Я использую XML mvc.SiteMap только в настоящее время. Однако мне, возможно, придется начать использовать DynamicNodeProviders. – SamJolly

Смежные вопросы