Umbraco Cast" IPublishedContent"输入" CustomModel"类型

时间:2015-12-17 00:20:25

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

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

2 个答案:

答案 0 :(得分:5)

不确定您使用的是什么版本的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'
}

“编辑”类是由模型构建器生成的。

答案 1 :(得分:3)

我的建议是使用Ditto - 可以使用Nuget包,并允许您编写如下代码:

var posts = Model.Content.Children.As<BlogPostModel>();

您可以在此处找到关于Ditto的文档:https://github.com/leekelleher/umbraco-ditto并且在博客帖子中也有很多关于它的信息。

基本上,您自己编写了一个模型,然后可以使用Ditto As<Model>()泛型扩展方法直接映射它。