在Umbraco 7中创建动态菜单

时间:2015-07-02 13:10:29

标签: asp.net-mvc menu umbraco

我正在为Umbraco工作并努力在Umbraco中创建动态菜单。

应使用menuTitle调用菜单。

我目前的代码是部分视图。

<nav>
  <ul>
    <li>
      <a href="#">Home</a>
    <li>

    @foreach (var m in Model.Menu)
    {
      <li>
        <a href="@m.Url">@m.menuTitle</a>
      </li>
    }
  </ul>
</nav>
<div class="clear"></div>

3 个答案:

答案 0 :(得分:0)

如果Menu是一个nodelist(比如MultiNodeTreePicker数据类型),你可以使用这样的东西:

var nodecommalist = CurrentPage.Menu.ToString().Split(',');
@foreach (var m in nodecommalist)
{
var mitem = Umbraco.Content(m);
<li>
    <a href="@mitem.Url">@mitem.menuTitle</a>
</li>
}

或者你可以使用这样的东西来显示1级节点的所有孩子:

foreach (var m in CurrentPage.AncestorOrSelf(1).Children.Where("hideInNavigation==False"))
{
  <li>
     <a href="@m.Url">@m.menuTitle</a>
  </li>
}

此示例还使用hideInNavigation,它是True / false数据类型。

答案 1 :(得分:0)

我认为以下会做到这一点。

@{
    @* Get the root of the website *@
    var root = CurrentPage.AncestorOrSelf(1);
}

<ul>
    @foreach (var page in root.Children.Where("Visible"))
    {
        <li class="@(page.IsAncestorOrSelf(CurrentPage) ? "current" : null)">
            <a href="@page.Url">@page.Name</a>
        </li>
    }
</ul>

答案 2 :(得分:0)

在渲染网站导航时,每次加载页面时都不会在网站上运行查询。一个好主意是做一次查询以生成动态菜单作为模型,然后将该模型存储在缓存中。这样,当页面加载时,它只是从内存中获取模型并减少网站上的负载。

我写了这篇博文,它为您提供了能够完成上述说法的代码。

http://www.codeshare.co.uk/blog/umbraco-site-navigation-menu-model-example-in-c-mvc/