bom*_*sen 3 asp.net recursion umbraco razor
我想我需要一点帮助,使用Razor viewengine在Umbraco中渲染af递归树菜单结构.
我需要渲染以下树形菜单结构:
Page 1
Page 2
Page 3
Page 4
Page 5
Page 6
Page 7
Run Code Online (Sandbox Code Playgroud)
所以,当我在Page 5我需要使用CSS类"open"的父节点上:Page 4,Page 2与Page 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>
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助/提示都非常感谢!:-) 提前致谢!
通过移动一些代码等解决了这个问题.最终解决方案:
@{
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>
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2888 次 |
| 最近记录: |