【问题标题】:Can I configure one MvcSiteMapProvider node for multiple actions?我可以为多个操作配置一个 MvcSiteMapProvider 节点吗?
【发布时间】:2015-09-06 16:31:33
【问题描述】:

我使用 MvcSiteMapProvider 仅用于在我身边显示 BreadCrumb。我的应用程序中有多个主控(特别是 27 个)和 CRUD 屏幕。每个主控器都有一个控制器,具有索引、创建、编辑、详细信息和删除操作。 我不想要每个动作的详细面包屑,只有控制器对我来说就足够了。 例如
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()

【问题讨论】:

    标签: asp.net-mvc mvcsitemapprovider


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-12
      • 1970-01-01
      • 2020-12-31
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多