使用MVCSiteMap仅显示根节点

时间:2012-01-25 20:42:45

标签: asp.net-mvc-3 sitemap mvcsitemapprovider

我正在使用Asp.net MVC SiteMap Provider管理我网站的站点地图。

申请结构:

这是一个小应用程序,我有一个名为“Admin”的区域

网站地图

<mvcSiteMapNode title="LET'S GO" controller="Home" action="Index">

    <mvcSiteMapNode title="FESTAS" controller="Festas" action="Index">
        <mvcSiteMapNode title="INFANTIL" controller="Festas" action="Infantil" />
        <mvcSiteMapNode title="ADULTO" controller="Festas" action="Adulto" />
    </mvcSiteMapNode>
    <mvcSiteMapNode title="ORÇAMENTO" controller="Home" action="Index" />
    <mvcSiteMapNode title="CONTATO" controller="Home" action="Contato"/>

    <mvcSiteMapNode title="ADMINISTRAÇÃO" area="Admin" controller="Home" action="Index">
        <mvcSiteMapNode title="FESTAS" area="Admin" controller="Festas" action="Index" />
        <mvcSiteMapNode title="SUBSIDIÁRIAS" area="Admin" controller="Subsidiarias" action="Index" />
    </mvcSiteMapNode>

</mvcSiteMapNode>

问题

要显示主菜单,请使用以下命令:

@Html.MvcSiteMap().Menu()

这是第一个问题,显示所有节点。

  1. 我想只显示节点根(例如“INFANTIL”和“ADULTO”不会显示)
  2. 无法显示管理区域的节点。它们只出现在另一个视图中。
  3. 我如何完成这些任务?

    问题

    如何仅为特定节点生成站点地图? 示例:我想生成“ADMINISTRAÇÃO”的仅限站点地图的子节点

    感谢所有人!!

2 个答案:

答案 0 :(得分:1)

  

1)我想只显示节点根(&#34; INFANTIL&#34;和&#34; ADULTO&#34;例如不会显示)

@Html.MvcSiteMap().Menu(1, 1)
  

2)无法显示管理区域的节点。它们只出现在另一个视图中。

可能您应该使用角色属性。 Creating a first sitemap

  

如何仅为特定节点生成站点地图?

尝试使用其中一个重载方法

public static System.Web.Mvc.MvcHtmlString Menu(this MvcSiteMapProvider.Web.Html.MvcSiteMapHtmlHelper helper, System.Web.SiteMapNode startingNode, bool startingNodeInChildLevel, bool showStartingNode, int maxDepth)

答案 1 :(得分:0)

我知道这个问题有点过时了,但是为了将来使用: 这可以通过使用访问权限修饰Actions(或Controller)来轻松完成。

我认为不是每个人都可以访问管理部分(只有认可的)。因此,您可以创建例如管理角色并使用FilterAttribute修饰Actions(或Controller):例如

 [Authorize(Roles = "Administrator")]
        public ActionResult Index()
{ ....  }

一旦用户将自己标识为管理员,将显示“索引操作”的站点地图条目。