是否可以访问Umbraco中动态合成模型的属性



我的网站上有一些不同的样式/模板。这些模板都用于我网站上的作文。以下是我的文档类型示例:

Layouts (folder)
Style 1
Style 2
Style 3
Products (folder)
ProductsPage
Product
News (folder)
NewsOverview
NewsPage

基本上就是这个样子。除ProductNewsPage外,所有这些都有模板,但它们都有Style X作为组成。以下是我的内容节点:

Home
Products
Product 1 (Style 2)
Product 2 (Style 3)
Product 3 (Style 2)
Product 4 (Style 1)
News
Article 1 (Style 1)
Article 2 (Style 3)

等等。你明白了吗?Style X文档类型都是合成的,所以我不必一遍又一遍地为同一页设置样式,但我仍然可以创建我想要的任何样式的页面。

现在,在我的父对象(例如NewsOverview)上,我想访问子对象的属性。在NewsOverview模板文件中,我必须执行以下操作:

@foreach(var article in Model.Content.Children) {
dynamic image = article;
<img src="@image.OverviewImage[0].Url" />
<p>@article.GetPropertyValue("overviewTitle")</p>
}

如果不使用字符串或强制转换为动态(基本上),我就无法访问属性,尽管我的模型被设置为Dll,并且我通常可以使用intellisense等进行Model.Content.PROPERTY

我怎样才能做到这一点?如何在不使用动态的情况下访问属性?我知道孩子们不一定都一样,但我所有样式的页面都包含相同的属性,只是在模板中排列不同。

有一个名为Children<T>()的方法,它可以获取特定类型的所有子文档,因此可以安全地在foreach中强制转换:

@foreach(Article article in Model.Content.Children<Article>()) {
<img src="@article.OverviewImage.First().Url" />
<p>@article.OverviewTitle</p>
}

您可能想要在article.OverviewImage.First()周围添加一些逻辑,就好像OverviewImage没有值一样,它会抛出一个null引用异常。

您是否已将父模型添加到模板中?:

@inherits UmbracoViewPage<ContentModels.Product>
@using ContentModels = Umbraco.Web.PublishedContentModels;

您可能需要将子级强制转换为特定类型:

@using ContentModels = Umbraco.Web.PublishedContentModels;
@foreach (var article in Model.Content.Children.Select(child => new ContentModels.NewsPage(child)) {
<img src="@article .OverviewImage.First().Url" />
<p>@article.OverviewTitle</p>
}

.Children()只得到IPublishedContent类型的子级,因为ModelsBuilder不知道当前页面下可以存在哪些类型的文档。

相关内容

  • 没有找到相关文章

最新更新