在mvc中绑定XML节点时遇到问题.站点地图到global.asa中的路线



我使用的是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个URL是:

报告路线:

Report/10

报告_路段路线:

Report/10/Section/100

我在第二条路线上没有得到认可,因此面包屑轨迹不会出现在相关页面上。我曾希望通过在mvc.sitemap中指定"route"属性,mvcSiteMapProvider就能将两者绑定起来。

思想。我哪里错了?

非常感谢

编辑:

似乎我需要指定"控制器"one_answers"动作"中的"mvc.sitemap"one_answers"路由"本身是行不通的。

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

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

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

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

最新更新