【问题标题】:SiteMapPath - passing params through routing and querystringSiteMapPath - 通过路由和查询字符串传递参数
【发布时间】:2014-07-29 17:11:26
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 升级到4.6.10后问题已修复。谢谢!
    猜你喜欢
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    相关资源
    最近更新 更多