我只使用MvcSiteMapProvider在我这边显示BreadCrumb。我在使用CRUD屏幕的应用程序中拥有多个主人(特别是27个)。每个主控都有一个控制器,具有索引,创建,编辑,详细信息和删除操作。
我不想详细说明每个动作的痕迹,只有控制器对我来说足够了。
E.g
1.组织安排:
- 部门组
*部门
- 项目组
*项目
- 等组
现在,当我配置MvcSiteMapProvider xml站点地图时,我需要这样的东西
<mvcSiteMapNode title="Department Group" controller="DeptGrp" action="*">
<mvcSiteMapNode title="Department" controller="department" action="*" />
</mvcSiteMapNode>
<mvcSiteMapNode title="Project Group" controller="PrjGrp" action="*">
<mvcSiteMapNode title="Project" controller="project" action="*" />
</mvcSiteMapNode>
但是,MvcSiteMapProvider确实允许操作名称为“*”。它需要具体。如何在控制器上配置映射,当操作在节点选择中发挥任何意义时,在sitemaphelper中显示痕迹?
我用它来显示面包屑
@Html.MvcSiteMap().SiteMapPath()
答案 0 :(得分:1)
不,不可能将多个操作与单个节点匹配。
我们的想法是您需要在MvcSiteMapProvider
配置中创建层次结构以进行导航,因为MVC不会自动提供一个层次结构。请注意,您可以使用visibility providers隐藏您不希望在SiteMapPath
中显示的任何节点。
如果您有特定的约定,则可以使用dynamic node provider或实施ISiteMapNodeProvider
并使用Reflection
来发现您的操作,以便为每个约定添加一个节点自动。
另一种选择是在每个控制器上使用带有参数的单个操作。在这种情况下,您可以对该参数的每个值使用preservedRouteParameters
到force a match,然后您只需要整个控制器的单个节点。
但无论如何,每个动作都需要一个节点。