Umbraco Cast“;IPublishedContent;键入“;CustomModel”;类型
本文关键字:类型 CustomModel IPublishedContent Cast Umbraco 键入 | 更新日期: 2023-09-27 18:27:16
我正在测试Umbraco,并试图在页面上设置博客列表。我有一个自定义的BlogMode.cs,看起来像这样:
public class BlogPostModel : RenderModel
{
public BlogPostModel() : base(UmbracoContext.Current.PublishedContentRequest.PublishedContent)
{
}
public string MainBlogImage { get; set; }
public string ImageAltText { get; set; }
public string Introduction { get; set; }
public string Category { get; set; }
public IEnumerable<IPublishedContent> BlogPosts { get; set; }
}
这很好,因为我的模型也不会具有上述属性。现在我想做的是通过使用这个来获得所有的博客文章:
var posts = Model.Content.Children.ToList();
但这样做的作用是创建一个类型为IPublishedContent
的列表。所以现在我不能在我的博客模型中使用Model.Introduction
或Model.ImageAltText
或任何其他属性,因为它是IPublishedContent
类型
我该如何获得此集合并使其成为BlogModel
类型?
不确定你使用的是什么版本的Umbraco,但我使用的是7.4.3(包括模型构建器),这对我很有用。
var page = umbracoHelper.TypedContent(relatedLink.Internal);
if (page.ContentType.Alias.Equals("editorial"))
{
var typedPage = (Editorial)page;
//Your code here, for example 'typedPage.SiteLinkImage'
}
"Editorial"类是由模型生成器生成的。
快进2019:
这些天我会使用Umbraco ModelsBuilder中的烘焙。它将开箱即用地为您生成强类型模型,并具有足够的扩展点,以便能够自定义这些模型以及它们的生成位置和方式。
有关更多信息,请查看GitHub:上的ModelsBuilder wiki
https://github.com/zpqrtbnk/Zbu.ModelsBuilder/wiki/Umbraco.ModelsBuilder
2015年左右的原始答案:
我的建议是使用Ditto-有一个Nuget包可用,可以让你写这样的代码:
var posts = Model.Content.Children.As<BlogPostModel>();
你可以在这里找到Ditto的文档:https://github.com/leekelleher/umbraco-ditto在博客文章等中也有很多关于它的信息。
基本上,您自己编写一个Model,然后可以使用Ditto As<Model>()
通用扩展方法直接映射它。