0

我正在使用 MVC3、C#4、Razor、MvcSiteMapProvider V4。

我正在尝试将我的 mvc.sitemap 文件中的 MvcSiteMapNodes 显式绑定到我的 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 个网址是:

举报途径:

Report/10

Reports_Sections 路线:

Report/10/Section/100

我在第二条路线上没有得到认可,因此相关页面上没有出现面包屑路径。我曾希望仅通过在 mvc.sitemap 中指定“路由”属性,mvcSiteMapProvider 就可以绑定两者。

想法。我哪里出错了?

非常感谢

编辑:

看来我需要在“mvc.sitemap”中指定“控制器”和“动作”,而“路由”本身是行不通的。

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

1 回答 1

1

route 参数用于将匹配范围缩小到特定路由,而不是尝试匹配所有路由。但是,仅指定路由并不足以使其匹配。您还需要提供您的操作、控制器、(可选)区域和(可选)操作参数。

此外,为了让它看起来记住您的面包屑路径,您需要为每个可能的 ClientID/ReportID 组合添加一个节点到您的站点地图。这可以通过使用几个DynamicNodeProviders从您的数据库/数据源加载您的数据来相当容易地实现。整个原则是基于匹配地图中的唯一位置,您需要这些 ID 来使每个匹配都唯一。

PreservedRouteParameters 通常用于使任何 ID 匹配 CRUD 操作中的操作方法参数。这使您能够使您的添加/编辑/删除页面与任何 ID 匹配,而无需在站点地图中注册这些 ID。

于 2013-08-17T23:18:06.430 回答