是否可以使用面包屑来拥有两个不同的路径?

时间:2015-08-18 18:24:55

标签: asp.net-mvc mvcsitemapprovider

我正在使用MvcSiteMapProvider在我的应用程序中生成面包屑。

@Html.MvcSiteMap().SiteMapPath()

在应用程序中,我们有一个Batch实体和一个Item Entity。批次有物品。但是,应用程序可以在不通过特定批处理的情况下访问项目。

我想显示用户所遵循的路径,如果她已按批次传递:

主页 - >批次 - > [BatchNumber] - > [项目]

如果直接访问该项目,我想显示如下路径:

主页 - >项目 - > [项目]

我的mvc.sitemap配置如下:

<mvcSiteMapNode title="$resources:Resources.Resources,Home" controller="Home" action="Index" preservedRouteParameters="culture">
    <mvcSiteMapNode title="$resources:Resources.Resources,Batch" controller="Batch" action="Index" preservedRouteParameters="culture">
      <mvcSiteMapNode title="$resources:Resources.Resources,NewBatch" controller="Batch" action="Create" preservedRouteParameters="culture" visibility="SiteMapPathHelper,!*" />
      <mvcSiteMapNode title="Edit" controller="Batch" action="Edit" preservedRouteParameters="culture,batchId" visibility="SiteMapPathHelper,!*">
        <mvcSiteMapNode title="Item" controller="Item" action="Edit" preservedRouteParameters="culture,itemId,batchId" visibility="SiteMapPathHelper,!*">
        </mvcSiteMapNode>
        <mvcSiteMapNode title="$resources:Resources.Resources,NewItem" controller="Item" action="Create" preservedRouteParameters="culture,noLot" visibility="SiteMapPathHelper,!*" />
      </mvcSiteMapNode>
    </mvcSiteMapNode>
    <mvcSiteMapNode title="$resources:Resources.Resources,Item" controller="Item" action="Index" preservedRouteParameters="culture">
      <mvcSiteMapNode title="Item" controller="Item" action="Edit" preservedRouteParameters="culture,itemId" visibility="SiteMapPathHelper,!*">
      </mvcSiteMapNode>
      <mvcSiteMapNode title="$resources:Resources.Resources,NewItem" controller="Item" action="Create" preservedRouteParameters="culture" visibility="SiteMapPathHelper,!*" />
    </mvcSiteMapNode>
  </mvcSiteMapNode>

有可能吗?

使用当前配置,显示的路径始终为:

主页 - &gt;批次 - &gt; [BatchNumber] - &gt; [项目]

如果我反转mvc.sitemap文件中的顺序,它总是显示:

主页 - &gt;项目 - &gt; [项目]

1 个答案:

答案 0 :(得分:0)

没有

第一场比赛总是胜利,使用相同路线值配置的多个节点 不支持

SiteMap根本不使用会话状态,因此没有用户访问过的“以前的URL”的概念。有关其工作原理的完整说明,请参阅How To Make MvcSiteMapProvider Remember a User's Position

唯一的内置选项是add additional information to the URL(路径或查询字符串)来区分URL,因为第一个匹配总是获胜。当用户在“直通”页面上时,您可能会生成不同的URL。

但是,也可以使用依赖注入来替换MvcSiteMapProvider的匹配行为,以便它可以匹配会话状态值。如果你这样做,那么URL不需要不同,但你仍然需要在每个“直通”页面上设置会话状态键和值。只要您在用户未通过任何页面时始终配置默认页面,它就可以正常工作。请参阅demo projectexplanation how to use it