2016-12-09 33 views
0

Я использую пакет nuget MvcSiteMapProvider для создания моей структуры меню. У меня есть вкладка под названием «DTLSA», и когда пользователи находят, что я хочу видеть только «Статус приложения» и «Применить сейчас». Поэтому из «Персонала» и ниже все будет скрыто в структуре. Однако, если пользователь находится на «Персонале» или на любой другой странице, я хочу, чтобы «DTLSA» применил к нему класс css «active» (это единственная причина, по которой я их здесь). Если я устанавливаю 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> 
}