我可以为多个操作配置一个 MvcSiteMapProvider 节点吗?

Can I configure one MvcSiteMapProvider node for multiple actions?

我使用 MvcSiteMapProvider 只是为了在我这边显示 BreadCrumb。我在带有 CRUD 屏幕的应用程序中有多个母版(特别是 27 个)。每个主控器都有一个控制器,具有索引、创建、编辑、详细信息和删除操作。 我不想要每个动作的详细面包屑,只有控制器对我来说就足够了。 例如
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 允许操作名称为“*”。它需要具体。我如何仅基于控制器配置地图,当操作在节点选择中发挥重要作用时,在站点地图助手中显示面包屑?

我用它来显示面包屑

@Html.MvcSiteMap().SiteMapPath()

不,单个节点不能匹配多个动作。

我们的想法是您需要在 MvcSiteMapProvider 配置中创建用于导航的层次结构,因为 MVC 不会自动提供层次结构。请注意,您可以使用 visibility providers 隐藏任何您不想在 SiteMapPath.

中显示的节点

如果您有特定的约定,您可以使用 dynamic node provider 或实施 ISiteMapNodeProvider 并使用 Reflection 来发现您的操作,因此添加了一个节点每一个自动。

另一种选择是在带有参数的每个控制器上使用单个操作。在这种情况下,您可以在该参数的每个值上使用 preservedRouteParametersforce a match,然后整个控制器只需要一个节点。

但无论如何,每个动作都需要一个节点。