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.IntroductionModel.ImageAltText或任何其他属性,因为它是IPublishedContent 类型

我该如何获得此集合并使其成为BlogModel类型?

Umbraco Cast“;IPublishedContent;键入“;CustomModel”;类型

不确定你使用的是什么版本的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>()通用扩展方法直接映射它。