私はメニュー構造を作成するために、NugetパッケージMvcSiteMapProviderを使用しています。私は "DTLSA"と呼ばれるタブを持っていて、ユーザーが "Application Status"と "Apply Now"だけを表示したいと思ったときにタブが表示されます。したがって、「人員」以下の人物はすべて構造内に隠されます。しかし、ユーザーが "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>
}