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

时间:2016-07-28 06:38:52

标签: umbraco umbraco7

我刚开始使用umbraco 4天前,我遇到了这个问题。

我有一个名为"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)

2 个答案:

答案 0 :(得分:2)

假设partial继承UmbracoTemplatePage CurrentPage属性为dynamic,则不能将lambda表达式用作动态调度操作的参数。

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

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

注意:Name属性将返回CMS中输入的文件名称,最有可能是“关于我们”而不是“关于我们”

使用about会返回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>
}

答案 1 :(得分:2)

使用Name属性在代码中查询非常糟糕的做法 - 如果有人将名称更改为Karma,该怎么办?你的代码会破裂。如果节点上还有其他独特的东西,那就更好了。

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

About

或者虽然不那么健壮,但可以使用页面的ID。

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

与此类关键页面的名称相比,ID更改的可能性要小得多。

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

要好得多