无法获取特定子页面的属性

Can't get Properties of a Specific Child Page

我 4 天前才开始使用 umbraco,但一直被这个问题困扰。

我有一个名为 "About Us" 的页面,它是 "Home" 下的一个子页面,我需要在 "Home" 页面中获取它的一些属性。

我创建了一个局部视图宏来执行此操作,但我收到加载局部视图脚本的错误。

下面是我的代码:

@{ var selection = CurrentPage.Children.Where(x => x.Name == "aboutus"); }

@if (selection.Any())
{
    <ul>
        @foreach (var item in selection)
        {
            <div class="sc-inner">
                <h4>
                   @item.PageTitle</h4>
                <p>
                   @Umbraco.Truncate(@item.mainAboutDescription, 100)</p>
                <a class="btn btn-danger" href="@item.Url">Read More...</a>
            </div>
            break;
        }
    </ul>
}

有人可以告诉我我做错了什么吗?

提前致谢。

编辑: 我得到的网站上的错误如下;

加载局部视图脚本时出错(文件:~/Views/MacroPartials/homePage_aboutUsSection.cshtml)

假设部分继承 UmbracoTemplatePage CurrentPage 属性 是 dynamic,您不能使用 lambda 表达式作为动态调度操作的参数。

如果您希望使用 Linq 查询内容,请使用 Model.Content 而不是 CurrentPage,后者是一个 IPublishedContent,例如

@{ var selection = Model.Content.Children.Where(x => x.Name == "aboutus"); }

注意:Name 属性 将 return 在 CMS 中输入的文件名称很可能是 'About Us' 而不是 'aboutus'

使用 about 将 return 和 IEnumerable<IPublishedContent> 因此您将需要使用 GetPropertyValue 方法而不是动态访问内容:

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage

@{ var selection = Model.Content.Children.Where(x => x.Name == "aboutus"); }

@if (selection.Any())
{
    <ul>
        @foreach (var item in selection)
        {
            <li class="sc-inner">
                <h4>
                    @item.GetPropertyValue("pageTitle")
                </h4>
                <p>
                    @Umbraco.Truncate(@item.GetPropertyValue<string>("mainAboutDescription"), 100)
                </p>
                <a class="btn btn-danger" href="@item.Url">Read More...</a>
            </li>
            break;
        }
    </ul>
}

在您的代码中使用名称 属性 进行查询是非常糟糕的做法 - 例如,如果有人将名称更改为 About 会怎样。你的代码会中断。如果节点上还有其他独特的东西那就更好了。

例如,如果您的关于我们页面有一个 aboutUs 文档类型,您可以使用:

Model.Content.Children.Where(x => x.DocumentTypeAlias == "exactNameOfYourDocTypeAliasHere")

或者,虽然不是那么可靠,但是可以使用页面的 Id。

Model.Content.Children.Where(x => x.Id == 1234) 

Id 比像这样的关键页面的名称更不可能更改。

我通常也不会在代码中使用 Id,但它比 Name 好得多