我正在使用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中指定“route”属性,mvcSiteMapProvider将绑定两者。
思考。我哪里出错?
非常感谢
编辑:
似乎我需要在“mvc.sitemap”中指定“controller”和“action”,并且“route”本身不起作用。
<mvcSiteMapNode title="Sections" controller="Section" action="FilterByReport" route="Report_Section" preservedRouteParameters="ClientId,ReportId">
答案 0 :(得分:1)
route参数用于将匹配范围缩小到特定路由,而不是尝试匹配所有路由。但是,仅指定路线不足以使其匹配。您还需要提供动作,控制器,(可选)区域和(可选)动作参数。
此外,为了使其能够记住您的痕迹痕迹,您需要为每个可能的ClientID / ReportID组合添加一个节点到您的站点地图。通过使用几个DynamicNodeProviders从数据库/数据源加载数据,可以相当容易地实现这一点。整个原则基于匹配地图中的唯一位置,您需要这些ID才能使每个匹配都是唯一的。
PreservedRouteParameters通常用于使任何ID与CRUD操作中的操作方法参数匹配。这使您能够使添加/编辑/删除页面与任何ID匹配,而无需在站点地图中注册这些ID。