我刚开始使用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)
答案 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
要好得多