【问题标题】:Umbraco Cast "IPublishedContent" type to "CustomModel" typeUmbraco 将“IPublishedContent”类型转换为“CustomModel”类型
【发布时间】:2015-12-17 00:20:25
【问题描述】:

我正在测试 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 类型?

【问题讨论】:

  • 你想达到什么目的?我猜您想在带有标题、简介和链接的页面上显示博客列表。
  • 是的,Tej,类似的东西,试图通过使用 Model.Introduction 之类的东西来获取自定义属性

标签: c# asp.net-mvc model umbraco


【解决方案1】:

不确定您使用的是哪个版本的 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”类由模型构建器生成。

【讨论】:

  • 这几天我也是这样做的。首次发布此问题时,ModelsBuilder 相对不为人知。它现在已成为事实上的标准,并融入到每个 Umbraco 安装中。
【解决方案2】:

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,并且在博客文章等中也有很多关于它的信息。

基本上,您自己编写一个模型,然后可以直接使用同上As&lt;Model&gt;() 泛型扩展方法对其进行映射。

【讨论】:

  • 我认为没有扩展包就没有办法吗?
  • 除非您想为此推出自己的框架...相信我 - 像 Ditto 这样的东西真的要容易得多
  • 基本上,罗伯茨所说的!还有另一种称为 ModelsBuilder 的解决方案,但对于大多数网站来说,Ditto 更简单易用!
  • 但是模型构建器会自动生成代码,而同上你必须手动编写所有模型,我认为这是很多工作。我喜欢线程中的其他答案,这对我有用。
  • @KrunalParmar 我同意 - ModelsBuilder 是当今大多数情况下的最佳选择。
猜你喜欢
  • 1970-01-01
  • 2022-11-18
  • 2022-08-18
  • 2014-02-20
  • 2014-09-02
  • 2011-09-12
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
相关资源
最近更新 更多