【问题标题】:mvcSiteMapNode hide child nodesmvcSiteMapNode 隐藏子节点
【发布时间】:2016-12-09 20:52:31
【问题描述】:

我正在使用 nuget 包 MvcSiteMapProvider 来创建我的菜单结构。我有一个名为“DTLSA”的选项卡,当用户悬停时,我只希望“应用程序状态”和“立即应用”可见。因此,“人员”及以下的所有内容都将隐藏在结构中。但是,如果用户在“人员”或任何其他页面上,我希望“DTLSA”将 css 类“活动”应用于它(这是我在这里拥有它们的唯一原因)。如果我设置 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>
}

【问题讨论】:

    标签: asp.net-mvc mvcsitemapprovider


    【解决方案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>
    }
    

    【讨论】:

      猜你喜欢
      • 2013-02-18
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      相关资源
      最近更新 更多