2016-12-09 115 views
0

我正在使用nuget包MvcSiteMapProvider來創建我的菜單結構。我有一個名爲「DTLSA」的選項卡,當用戶將鼠標懸停時,我只希望看到「應用程序狀態」和「立即應用」。所以從「人員」和以下都將隱藏在結構中。但是,如果用戶在「人員」或任何其他頁面上,我希望「DTLSA」將css類應用到它(這是我在這裏使用它的唯一原因)。如果我設置了visibility=!*,它不會將DTLSA選項卡設置爲活動狀態。是否可以將其設置爲活動狀態,但不讓這些選項顯示在下拉菜單中?mvcSiteMapNode隱藏子節點

Mvc.sitemap:

<mvcSiteMapNode title="DTLSA" url="#"> 
    <mvcSiteMapNode title="Application Status" controller="application" action="index" area="" /> 
    <mvcSiteMapNode title="Apply Now" controller="application" action="applynow" preservedRouteParameters="applicationId" area="" /> 
    <mvcSiteMapNode title="Personnel" controller="application" action="personnel" preservedRouteParameters="applicationId" area="" visibility="!*" /> 
    <mvcSiteMapNode title="Review" controller="application" action="review" area="" preservedRouteParameters="applicationId" visibility="!*" /> 
    <mvcSiteMapNode title="Checkout" controller="application" action="checkout" area="" preservedRouteParameters="applicationId" visibility="!*" /> 
    <mvcSiteMapNode title="Confirmation" controller="application" action="confirmation" preservedRouteParameters="applicationId" area="" visibility="!*" /> 
</mvcSiteMapNode> 

MenuHelperModel顯示模板:

@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel 
@using System.Web.Mvc.Html 
@using MvcSiteMapProvider.Web.Html.Models 

<ul class="nav navbar-nav navbar-right"> 
@foreach (var node in Model.Nodes) { 
    <li class="@(node.IsCurrentNode || node.Children.Any(n => n.IsCurrentNode) ? "active" : "") @(node.Children.Any() ? "dropdown" : "")">@Html.DisplayFor(m => node) 
     @if (node.Children.Any()) { 
      @Html.DisplayFor(m => node.Children) 
     } 
    </li> 
} 

回答

1

可以使用node.IsInCurrentPath屬性來確定該節點是當前路徑的一部分(無論它有或沒有可見的孩子)。

@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel 
@using System.Web.Mvc.Html 
@using MvcSiteMapProvider.Web.Html.Models 

<ul class="nav navbar-nav navbar-right"> 
@foreach (var node in Model.Nodes) { 
    <li class="@(node.IsInCurrentPath && !node.IsRootNode ? "active" : "") @(node.Children.Any() ? "dropdown" : "")">@Html.DisplayFor(m => node) 
     @if (node.Children.Any()) { 
      @Html.DisplayFor(m => node.Children) 
     } 
    </li> 
}