2

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

有没有办法让它们都工作?

4

1 回答 1

3

这是由于一个错误,现已在v4.6.10中修复(感谢报告)。

问题是“id”被指定为可选路由值,在这种情况下,当 URL 中没有将“id”作为路由值提供时,MVC 会自动生成一个带有“id/null”的路由值。由于在查找“当前”节点时路由值优先于查询字符串值,因此在这种情况下路由值不会被覆盖。在 v4.6.10 中为这种特定情况添加了一个例外,以覆盖空路由值,因此将使用查询字符串值而不是空路由值完成匹配。

升级后,使用preservedRouteParameters="id"将在两种情况下匹配,并显示面包屑。

于 2014-07-30T07:37:18.737 回答