mvcSiteMapNode 隐藏子节点
mvcSiteMapNode hide child nodes
我正在使用 nuget 包 MvcSiteMapProvider 创建我的菜单结构。我有一个名为 "DTLSA" 的选项卡,当用户悬停时我只希望 "Application Status" 和 "Apply Now" 可见。所以从 "Personnel" 及以下都将隐藏在结构中。但是,如果用户在 "Personnel" 或任何其他页面上,我希望 "DTLSA" 应用 css class "active"(这是我把它们放在这里的唯一原因)。如果我设置 visibility=!*
它不会将 DTLSA 选项卡设置为活动。是否可以将其设置为活动状态但不让这些选项显示在下拉列表中?
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>
}
您可以使用 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>
}
我正在使用 nuget 包 MvcSiteMapProvider 创建我的菜单结构。我有一个名为 "DTLSA" 的选项卡,当用户悬停时我只希望 "Application Status" 和 "Apply Now" 可见。所以从 "Personnel" 及以下都将隐藏在结构中。但是,如果用户在 "Personnel" 或任何其他页面上,我希望 "DTLSA" 应用 css class "active"(这是我把它们放在这里的唯一原因)。如果我设置 visibility=!*
它不会将 DTLSA 选项卡设置为活动。是否可以将其设置为活动状态但不让这些选项显示在下拉列表中?
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>
}
您可以使用 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>
}