C# Umbraco如何使用asp.net mvc绑定导航

C# Umbraco如何使用asp.net mvc绑定导航,c#,asp.net-mvc,asp.net-mvc-4,umbraco,umbraco7,C#,Asp.net Mvc,Asp.net Mvc 4,Umbraco,Umbraco7,我刚开始和Umbraco 7合作, 我创建了2个文档类型和3个页面 我正在使用从初学者工具包下载的模板 首先,为什么这个平台这么难理解?!?! 我已经在Umbraco.tv上看到了所有的剪辑 第二个也是重要的问题是: 为什么导航栏没有显示所有页面?看来我只有一页硬编码的 以下是模板的代码: @inherits UmbracoTemplatePage @{ // Model.Content is the current page that we're on AncestorsOrSelf

我刚开始和Umbraco 7合作, 我创建了2个文档类型和3个页面

我正在使用从初学者工具包下载的模板

首先,为什么这个平台这么难理解?!?! 我已经在Umbraco.tv上看到了所有的剪辑

第二个也是重要的问题是: 为什么导航栏没有显示所有页面?看来我只有一页硬编码的

以下是模板的代码:

@inherits UmbracoTemplatePage
@{
    // Model.Content is the current page that we're on AncestorsOrSelf is all of the ancestors this page has in the tree
    // (1) means: go up to level 1 and stop looking for more ancestors when you get there First() gets the first ancestor found (the home page, on level 1)
    var homePage = CurrentPage.AncestorsOrSelf(1).First();
    var menuItems = homePage.Children.Where("UmbracoNaviHide == false");
}
<!-- Nav -->
<ul class="menu">
    @* If the Url of the current page is "/" then we want to add the class "current_page_item" *@
    @* Otherwise, we set the class to null, that way it will not even be added to the <li> element *@
    <li class="@(CurrentPage.Url == "/" ? "sel" : null)">
        <a href="/homepage">Home</a>
    </li>
    @foreach (var item in menuItems)
    {
        var childrenItems = item.Children.Where("UmbracoNaviHide == false");
        <li class="@(CurrentPage.Id == item.Id ? "sel" : null)">
            <a href="@item.Url">@item.Name</a>
            @createSubmenu(childrenItems, item.Id)
        </li>
    }
</ul>

@helper createSubmenu(IEnumerable<IPublishedContent> nodes, int? parentId) {
    if (nodes.Count() > 0){
        <ul>
        @foreach (var node in nodes)
        {
            var childrenItems = node.Children.Where("UmbracoNaviHide == false");
            <li class="@(CurrentPage.Id == node.Id ? "sel" : null)">
                <a href="@node.Url">@node.Name</a>
                @createSubmenu(childrenItems, node.Id)
            </li>
        }
        </ul>
    }
}
<!-- /Nav -->
@继承UmbracoTemplatePage
@{
//Content是我们当前所在的页面,或者self是该页面在树中的所有祖先
//(1)意思是:升级到第1级,当你到达那里时停止寻找更多的祖先。首先()找到第一个祖先(在第1级的主页上)
var homePage=CurrentPage.AncestorsOrSelf(1.First();
var menuItems=homePage.Children.Where(“umbracanavihide==false”);
}
    @*如果当前页面的Url为“/”则我们要添加类“当前页面\项目”*@ @*否则,我们将该类设置为null,这样它甚至不会被添加到
  • 元素中*@
  • @foreach(菜单项中的var项) { var childrenItems=item.Children.Where(“umbracanavihide==false”);
  • @createSubmenu(childrenItems,item.Id)
  • }
@辅助创建子菜单(IEnumerable节点,int?parentId){ 如果(nodes.Count()>0){
    @foreach(节点中的var节点) { var childrenItems=node.Children.Where(“umbracanavihide==false”);
  • @createSubmenu(childrenItems,node.Id)
  • }
} }
  • 翁布拉科之所以如此困难(其实并非如此),是因为它是一个平台,当开发人员使用它时,它将带走所有的荣耀。我的意思是,很多人希望产品是一个“开箱即用”的网站,你可以安装一个主题,然后编辑内容。那是Wordpress。翁布拉科不是这样的。它有一些入门工具包,我不觉得它们有多大帮助。当我建立一个Umbraco网站时,我总是从一张白纸开始
  • 现在,您正试图从我看到的内容打印导航菜单。下面是我推荐使用的代码。此外,您还需要考虑使用具有导航的主模板。

      @{ var homeNode=Model.Content.AncestorOrSelf(“[HomeNodeDocumentType]”); } @foreach(homeNode.Children.Where(x=>x.IsVisible)中的var节点) {
    • }

  • 一些要点:

    • 以前的代码是用于多级菜单的,如果需要,可以重写我提供的代码。我觉得没什么需要的
    • 请注意“yourFieldForTheTitle”,这是您必须添加到文档类型中的自定义文本字符串,不要使用Name,否则会让您头疼
    • 请注意“[HomeNodeDocumentType]”文档类型。在遍历树时,使用它们快速导航到所需的节点
    • 最后,使用Visual Studio设置Umbraco站点,Intellisense将帮助您开始

    就这样!翁布拉科是如此的好,坚持下去,它将是值得你的时间

    请像这样尝试var menuItems=homePage.Children.Where(x.GetPropertyValue(“umbracanaviHide”)=“1”);并使用.Where(x.GetPropertyValue(“umbracanaviHide”)=“1”)修改代码,其中(“umbracanaviHide==false”)。