2016-12-09 1 views
0

J'utilise le package nuget MvcSiteMapProvider pour créer ma structure de menu. J'ai un onglet appelé "DTLSA" et lorsque les utilisateurs survolent que je veux seulement "Statut de l'application" et "Appliquer maintenant" visibles. Donc, à partir de "Personnel" et ci-dessous seraient tous cachés dans la structure. Cependant, si un utilisateur est sur "Personnel" ou l'une des autres pages, je veux que le "DTLSA" soit appliqué à la classe css "active" (c'est la seule raison pour laquelle je les ai ici). Si je définis le visibility=!*, l'onglet DTLSA n'est pas actif. Est-il possible de le mettre en activité mais de ne pas afficher ces options dans la liste déroulante?mvcSiteMapNode masquer les noeuds enfant

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 modèle d'affichage:

@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> 
} 

Répondre

1

Vous pouvez utiliser la propriété node.IsInCurrentPath pour déterminer si le nœud fait partie du chemin de courant (si elle a des enfants visibles ou non).

@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> 
}