我正在使用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; [项目]
答案 0 :(得分:0)
没有
第一场比赛总是胜利,使用相同路线值配置的多个节点 不支持 。
SiteMap根本不使用会话状态,因此没有用户访问过的“以前的URL”的概念。有关其工作原理的完整说明,请参阅How To Make MvcSiteMapProvider Remember a User's Position。
唯一的内置选项是add additional information to the URL(路径或查询字符串)来区分URL,因为第一个匹配总是获胜。当用户在“直通”页面上时,您可能会生成不同的URL。
但是,也可以使用依赖注入来替换MvcSiteMapProvider
的匹配行为,以便它可以匹配会话状态值。如果你这样做,那么URL不需要不同,但你仍然需要在每个“直通”页面上设置会话状态键和值。只要您在用户未通过任何页面时始终配置默认页面,它就可以正常工作。请参阅demo project和explanation how to use it。