我在ASP.NET MVC 5项目中使用MVCSiteMapProvider 4.6.7。我在mvc.sitemap
文件中有这个:
<mvcSiteMapNode title="UserManager" controller="User" action="Index">
<mvcSiteMapNode title="UserAdd" controller="User" action="Create"/>
<mvcSiteMapNode title="UserEdit" controller="User" action="Edit"
preservedRouteParameters="id"
key="User_Edit"/>
<mvcSiteMapNode title="UserView" controller="User" action="Details"/>
</mvcSiteMapNode>
我正在显示这样的站点地图路径:
<div id="breadcrumbNav">
@Html.MvcSiteMap().SiteMapPath()
</div>
当我导航到http://siteurl/User/Edit/2
时,会显示站点地图路径,但是当我导航到http://siteurl/User/Edit?id=2
时,它不是。
删除preservedRouteParameters="id"
会改变这种情况(使用.../Edit?id=2
显示的网站地图,但不会显示.../Edit/2
)
有没有办法让它们都起作用?
答案 0 :(得分:2)
这是由于一个错误,现在已经在v4.6.10修复了(感谢报告)。
问题在于&#34; id&#34;被指定为可选路由值,在这种情况下,MVC自动生成一个路由值,其中包含&#34; id / null&#34;当&#34; id&#34;不作为URL中的路由值提供。由于路由值在查找&#34; current&#34;时优先于查询字符串值。在这种情况下,路由值没有被覆盖。在v4.6.10中为此特定情况添加了一个例外,以覆盖空的路由值,因此将使用查询字符串值而不是空路由值进行匹配。
升级后,在两种情况下使用preservedRouteParameters="id"
都会匹配,并会显示痕迹。