在Razor中从两个电话中列出一个列表
我正在使用Razor在Umbraco创建一个简单的站点 我有一个页面,其中可能包括几个内容模块,应该在页面上输出。页面也可能有子页面–当然,这些子页面不应该输出到页面上,这些页面上的内容也不应该输出。为了使编辑器更方便,可以将模块分组到页面下的可选模块文件夹中。因此,结构是: –我的页面 –内容1 ––模块文件夹 ––内容2 –子页面 ––内容3 因此,页面My page应该列出内容1和内容2,而忽略子页面及其decentant 只需创建两个列表CurrentPage.Children和CurrentPage.Modules.Children,然后将它们连接起来即可:在Razor中从两个电话中列出一个列表,razor,umbraco,umbraco7,Razor,Umbraco,Umbraco7,我正在使用Razor在Umbraco创建一个简单的站点 我有一个页面,其中可能包括几个内容模块,应该在页面上输出。页面也可能有子页面–当然,这些子页面不应该输出到页面上,这些页面上的内容也不应该输出。为了使编辑器更方便,可以将模块分组到页面下的可选模块文件夹中。因此,结构是: –我的页面 –内容1 ––模块文件夹 ––内容2 –子页面 ––内容3 因此,页面My page应该列出内容1和内容2,而忽略子页面及其decentant 只需创建两个列表CurrentPage.Children和Curr
// Retrieve all modules in subfolder "modules" ...
var modulesInFolder = CurrentPage.Modules.First().Children.Where("NodeTypeAlias != \"Page\"");
// Retrieve all modules found directly on page ... (i.e. child nodes except pages)
var modulesOnPage = CurrentPage.Children.Where("NodeTypeAlias != \"Page\"");
// Concatenate the two lists, so we can loop through them
var moduleList = modulesInFolder.Concat(modulesOnPage).ToList();
这非常有效–但是,模块文件夹是可选的。当它不存在时,页面上根本不会输出任何内容。可能是因为无法声明ModuleInfo文件夹。如果我切换这两个,它告诉我ModuleNoPage不包含“Concat”的定义
我尝试了一些不同的方法,比如计算元素的数量,然后根据结果对“moduleList”进行不同的定义,但没有效果。我还尝试使用一个调用,只列出所有子页面的子页面,但也列出了任何子页面的内容——除非我可以将某些内容传递给subjects方法
我怎样才能优雅地解决这个问题
只有一种页面类型,模块文件夹有自己的文档类型,但内容模块有几种不同的文档类型。我提出了以下示例,也许可以为您指出一个好的方向。我不清楚收集的对象是否是您最终想要的。下面的示例将接受传递给视图的父节点,然后将属性值写入页面。我试着做了一些例子,比如如何处理要忽略的事情,以及对于文档类型可能有不同逻辑的情况。我希望这能为你的问题提供一些指导
@using umbraco.NodeFactory
@model Node
@{
// For sake of example, we can state that Model is the My Page node you have
}
@foreach (var item in Model.GetChildNodes())
{
// So lets go through all items that you mentioned
@RenderSection(item)
}
@helper RenderSection(Node node)
{
if (node.NodeTypeAlias != "Page")
{
// Pages don't get rendered
return;
}
if (node.NodeTypeAlias == "Module")
{
@Html.Raw(node.GetProperty("TitleOfModule"))
}
// Output the content
@Html.Raw(node.GetProperty("BodyContent"))
// If you call render section again on the child nodes you can nest this structure to do things like if needed. Not sure
//– My Page
//––– Content 1
//––– Module folder
//––– ––– Content 2
//––– ––– ––– Module folder
//––– ––– ––– ––– Content 3
//––– Subpage
//––– ––– Content 3
foreach (var subItem in node.GetChildNodes())
{
@RenderSection(subItem)
}
}