C# Umbraco如何使用asp.net mvc绑定导航
我刚开始和Umbraco 7合作, 我创建了2个文档类型和3个页面 我正在使用从初学者工具包下载的模板 首先,为什么这个平台这么难理解?!?! 我已经在Umbraco.tv上看到了所有的剪辑 第二个也是重要的问题是: 为什么导航栏没有显示所有页面?看来我只有一页硬编码的 以下是模板的代码: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
@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)
}
}
}
@{
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”)。