gpt4 book ai didi

c# - MVCSitemapProvider 表示当前节点和父节点

转载 作者:太空狗 更新时间:2023-10-29 21:22:40 25 4
gpt4 key购买 nike

我想用 CSS 类标记当前节点及其父节点。我四处搜索并找到了这些链接:

http://mvcsitemap.codeplex.com/discussions/257786 http://mvcsitemap.codeplex.com/discussions/245000

所以我修改了 SiteMapNodeModelList.cshtml,现在当前节点高亮显示。但不确定我应该如何突出显示父节点。

<ul>
@foreach (var node in Model) {
<li class="@(node.IsCurrentNode ? "current" : "")" >@Html.DisplayFor(m => node)
@if (node.Children.Any()) {
@Html.DisplayFor(m => node.Children)
}
</li>
}
</ul>

为了标记父节点,我构建了一个扩展方法来检查所有直接子元素(我只有 2 个级别):

    public static bool IsCurrentNodeOrChild(this SiteMapNodeModel node)
{
if (node.IsCurrentNode) return true;

return node.Children.Any(n => n.IsCurrentNode);
}

然后像这样更改 MenuHelperModel.cshtml:

<ul id="menu">
@foreach (var node in Model.Nodes) {
<li class="@(node.IsCurrentNodeOrChild() ? "current" : "d")" >@Html.DisplayFor(m => node)
@if (node.Children.Any()) {
@Html.DisplayFor(m => node.Children)
}
</li>
}
</ul>

这现在工作得很好。但是真的没有更简单的方法吗?不会是地球上第一个需要这个的人吧?

最佳答案

这真的很酷,但是当我继续为此和那个创建扩展时,我采用了不同的方法,但我应该注意它是基于您的想法 :D

主菜单.cshtml:

@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel
@using MvcSiteMapProvider.Web.Html.Models

@foreach (var node in Model.Nodes)
{
<li @((node.IsCurrentNode || node.Children.Any(n => n.IsCurrentNode)) ? "class=active" : "")>@Html.DisplayFor(m => node)</li>
}

并将其插入

_Layout.cshtml

@Html.MvcSiteMap().Menu("MainMenu")

基本上它做同样的事情,只是更干净一点(在我看来)

关于c# - MVCSitemapProvider 表示当前节点和父节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20150358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com