gpt4 book ai didi

asp.net - Razor 递归树形菜单结构

转载 作者:行者123 更新时间:2023-12-02 13:07:08 25 4
gpt4 key购买 nike

我想我需要一些帮助来使用 Razor View 引擎在 Umbraco 中渲染 af 递归树菜单结构。

我需要渲染以下树形菜单结构:

Page 1
Page 2
Page 3
Page 4
Page 5
Page 6
Page 7

因此,当我在 Page 5 上时,我需要在父节点上使用 CSS 类 "open":Page 4Page 2Page 1 以及我所站立的节点上的 CSS 类 “active”

当单击菜单中的链接时,我已经获得了渲染正确节点的结构,但我根本不知道如何应用正确的类:-(

我的代码如下:

@{
DynamicNode current = Model;
var nodes = Model.AncestorOrSelf(2).Children.Where("Visible");
if(nodes.Any())
{
<ul class="side-nav-list">
@foreach(var node in nodes)
{
bool isDescendantOrSelf = current.IsDescendantOrSelf(node);
<li>
<a href="@node.Url">@node.Name</a>
@if(isDescendantOrSelf)
{
@RenderSubMenuRecursive(node)
}
</li>
}
</ul>
}
}

@helper RenderSubMenuRecursive(DynamicNode node)
{
if(node.Children.Any(x => x.GetPropertyValue("umbracoNaviHide").Equals("0") && Model.IsDescendantOrSelf(node)))
{
var childNodes = node.Children.Where(x => x.GetPropertyValue("umbracoNaviHide").Equals("0"));
string css = node.IsAncestor(Model) ? "open" : "";
<ul>

@foreach(var childNode in childNodes)
{
<li class="@css">
<a href="@childNode.Url">@childNode.Name</a>
@if (childNode.IsDescendantOrSelf(node))
{
@RenderSubMenuRecursive(childNode)
}
</li>
}
</ul>
}
}

对此的任何帮助/提示都非常感谢! :-) 提前致谢!

最佳答案

我自己通过移动一些代码等解决了这个问题。最终解决方案:

 @{
DynamicNode current = Model;
var nodes = Model.AncestorOrSelf(2).Children.Where("Visible");
if(nodes.Any())
{
<ul class="side-nav-list">
@foreach(var node in nodes)
{
@RenderSubMenuRecursive(node)
}
</ul>
}
}

@helper RenderSubMenuRecursive(DynamicNode node)
{
var childNodes = node.Children.Where(x => x.GetPropertyValue("umbracoNaviHide").Equals("0"));
string css = node.IsAncestor(Model) ? "open" : "";

if(node.Id == Model.Id)
{
css = "active";
}

<li class="@css">
<a href="@node.Url">@node.Name</a>

<ul>
@foreach (var childNode in childNodes.Where(childNode => Model.IsDescendantOrSelf(node)))
{
@RenderSubMenuRecursive(childNode)
}
</ul>
</li>
}

关于asp.net - Razor 递归树形菜单结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15565709/

25 4 0