使用Umbraco.ModelsBuilder制作一个模板中的多种内容类型

问题描述:

我们有多种基本内容类型News,Reviews。每个从我们的复合材料继承属性:_Page & _Article。这使我们能够将所有三种内容类型分别归入单个文章模板。使用Umbraco.ModelsBuilder制作一个模板中的多种内容类型

目前使用IPublishedContent,意味着我们有类似:

if (Model.Content.DocumentTypeAlias == "review") 
    { 
     // ... Do This 
    } 

随着ModelsBuilder,我们不能再这样做了。

结果是看起来像这样的模型:

UML

试图这样做:@inherits UmbracoViewPage<Umbraco.Web.PublishedContentModels.IArticle>,但这意味着我失去了我的所有其他属性。

对于使用多种内容类型的模板,您将继承哪种模型,还是有其他我们需要做的事情?

关于此事的说明:我很乐意去做ContentType,但这意味着巨大的数据丢失。

如果你做@inherits UmbracoViewPage<Umbraco.Web.PublishedContentModels.IArticle>,那么你可以做些什么,如var review = Model as Umbraco.Web.PublishedContentModels.Review。如果review不为空,则您知道该页面的类型为Review

(顺便说一句,不记得,如果它需要Model.Content你在施放。)

+0

英雄。这正是我需要的,非常感谢。 –

虽然你可以自由地从一个ModelsBuilder类,通常大多数,在我的经验是使用ModelsBuilder继承剃刀模板以帮助使用Route Hijacking为控制器中的标准视图模型提供水合物。

很明显,您的工作是创建和维护这些视图模型,但对于许多人来说,这是使用Umbraco或不使用Umbraco的标准做法。

由于mortenbock说,你可以做@inherits UmbracoViewPage<IArticle>然后你实际上可以做var isReview = Model is Review

检测型我删除了车型名称的Umbraco.Web.PublishedContentModels.一部分。这是没有必要的,因为它们已经在Views/Web.config中被引用。

+0

这更适合对mortenbock的回答发表评论。 – trincot

您可以使用该模型的接口,然后使用isas来检查类型并采取相应措施。