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

时间:2015-09-06 16:31:33

标签: asp.net-mvc mvcsitemapprovider

我只使用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()

1 个答案:

答案 0 :(得分:1)

不,不可能将多个操作与单个节点匹配。

我们的想法是您需要在MvcSiteMapProvider配置中创建层次结构以进行导航,因为MVC不会自动提供一个层次结构。请注意,您可以使用visibility providers隐藏您不希望在SiteMapPath中显示的任何节点。

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

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

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