Umbraco Can';无法获取特定子页的属性

Umbraco Can';无法获取特定子页的属性,umbraco,umbraco7,Umbraco,Umbraco7,我4天前才开始使用umbraco 我有一个名为“关于我们”的页面,它是“Home”下的一个孩子,我需要在“Home”页面中获取它的一些属性 我创建了一个局部视图宏来执行此操作,但在加载局部视图脚本时出现了错误 下面是我的代码: @{ var selection = CurrentPage.Children.Where(x => x.Name == "aboutus"); } @if (selection.Any()) { <ul> @foreach (

我4天前才开始使用
umbraco

我有一个名为
“关于我们”
的页面,它是
“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>
}
@{var selection=CurrentPage.Children.Where(x=>x.Name==“aboutus”);}
@if(selection.Any())
{
    @foreach(选择中的var项目) { @item.PageTitle @Umbraco.Truncate(@item.main关于说明,100)

    打破 }
}
有人能告诉我我做错了什么吗

提前谢谢

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


加载部分视图脚本时出错(文件:~/Views/MacroPartials/homePage\u aboutUsSection.cshtml)

假设该部分是继承
UmbracoTemplatePage
CurrentPage
属性是
动态的
,则不能将lambda表达式用作动态调度操作的参数

如果希望使用Linq查询内容,请使用
Model.content
而不是
CurrentPage
,后者是
i发布的内容

@{ var selection = Model.Content.Children.Where(x => x.Name == "aboutus"); }
注意:
Name
属性将返回CMS中输入的文档名称,很可能是“关于我们”,而不是“关于我们”

使用about将返回一个
IEnumerable
,因此您需要使用
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>
}
@继承Umbraco.Web.Mvc.UmbracoTemplatePage
@{var selection=Model.Content.Children.Where(x=>x.Name==“aboutus”);}
@if(selection.Any())
{
    @foreach(选择中的var项目) {
  • @item.GetPropertyValue(“页面标题”) @Umbraco.Truncate(@item.GetPropertyValue(“mainAboutDescription”),100)

  • 打破 }
}
假设分部继承的是
UmbracoTemplatePage
CurrentPage
属性是
动态的
,则不能将lambda表达式用作动态调度操作的参数

如果希望使用Linq查询内容,请使用
Model.content
而不是
CurrentPage
,后者是
i发布的内容

@{ var selection = Model.Content.Children.Where(x => x.Name == "aboutus"); }
注意:
Name
属性将返回CMS中输入的文档名称,很可能是“关于我们”,而不是“关于我们”

使用about将返回一个
IEnumerable
,因此您需要使用
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>
}
@继承Umbraco.Web.Mvc.UmbracoTemplatePage
@{var selection=Model.Content.Children.Where(x=>x.Name==“aboutus”);}
@if(selection.Any())
{
    @foreach(选择中的var项目) {
  • @item.GetPropertyValue(“页面标题”) @Umbraco.Truncate(@item.GetPropertyValue(“mainAboutDescription”),100)

  • 打破 }
}
在代码中使用Name属性进行查询是一种非常糟糕的做法-例如,如果有人将名称更改为
About
。你的密码会被破解。如果节点上有其他唯一的东西,那么它会更好

例如,如果您的about us页面有aboutUs文档类型,您可以使用:

Model.Content.Children.Where(x => x.DocumentTypeAlias == "exactNameOfYourDocTypeAliasHere")
或者,尽管没有那么健壮,但可以使用页面的Id

Model.Content.Children.Where(x => x.Id == 1234) 
Id的更改可能性远小于这样一个关键页面的名称


我通常也不会在代码中使用Id,但使用Name属性在代码中进行查询要比使用Name好得多,这是一种非常糟糕的做法—例如,如果有人将Name更改为About
,该怎么办。你的密码会被破解。如果节点上有其他唯一的东西,那么它会更好

例如,如果您的about us页面有aboutUs文档类型,您可以使用:

Model.Content.Children.Where(x => x.DocumentTypeAlias == "exactNameOfYourDocTypeAliasHere")
或者,尽管没有那么健壮,但可以使用页面的Id

Model.Content.Children.Where(x => x.Id == 1234) 
Id的更改可能性远小于这样一个关键页面的名称


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

请发布error@Anth12,谢谢回复。请参阅已编辑的问题。Umbraco将通过一条一般消息(可以从config/Umbraco.config中启用错误)提示该错误。只是一个注释,您在
ul
中嵌套了
div
元素。您应该使用
li
来代替,或者更改
ul
。您可以发布error@Anth12,谢谢回复。请参阅已编辑的问题。Umbraco将通过一条一般消息(可以从config/Umbraco.config中启用错误)提示该错误。只是一个注释,您在
ul
中嵌套了
div
元素。您应该使用
li
来代替,或者更改
ul
。哦,非常感谢您的解释。我欠你的债。您提到的name属性可以返回为“About Us”,而不是我前面指定的“aboutus”。非常感谢。太好了,没问题。非常感谢你的解释。我欠你的债。您提到的name属性可以返回为“About Us”,而不是我前面指定的“aboutus”。非常感谢。太好了,没问题。