SiteMapPath - 通过路由和查询字符串传递参数

时间:2014-07-29 17:11:26

标签: asp.net-mvc asp.net-mvc-routing mvcsitemapprovider asp.net-mvc-sitemap

我在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

有没有办法让它们都起作用?

1 个答案:

答案 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"都会匹配,并会显示痕迹。