2016-12-09 4 views
0

Nuget 패키지 MvcSiteMapProvider를 사용하여 메뉴 구조를 만듭니다. "DTLSA"라는 탭이 있는데 사용자가 마우스를 올리면 "응용 프로그램 상태"와 "지금 적용"이 표시됩니다. 그래서 "Personnel"과 그 아래에서 모든 것이 구조에 숨겨집니다. 그러나 사용자가 "Personnel"또는 다른 페이지에있는 경우 "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> 
}