Umbraco.ModelsBuilder 一个模板中的多种内容类型

Multiple content types in one template with Umbraco.ModelsBuilder

我们有多种基本内容类型 NewsReviews。每个都从我们的复合材料中继承属性:_Page & _Article。这使我们能够将所有三种内容类型整合到一个文章模板中。

当前使用 IPublishedContent,意味着我们有类似的东西:

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

使用 ModelsBuilder,我们不能再这样做了。

结果模型如下所示:

UML

尝试过:@inherits UmbracoViewPage<Umbraco.Web.PublishedContentModels.IArticle>,但这意味着我失去了所有其他财产。

对于使用多种内容类型的模板,您会继承什么模型,或者我们需要做些什么?

注意事项:我很想做_Page > _Article > ContentType,但这意味着巨大的数据丢失。

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

(顺便说一句,不记得是否需要 Model.Content 你做演员。)

虽然您可以自由地从 ModelsBuilder class 继承 Razor 模板,但根据我的经验,通常大多数情况下,使用 ModelsBuilder 来帮助在使用 Route Hijacking 的控制器中混合标准视图模型。

显然,创建和维护这些视图模型是您的工作,但对于许多人来说,无论是否使用 Umbraco,这都是标准做法。

正如 mortenbock 所说,你可以做 @inherits UmbracoViewPage<IArticle> 然后你可以通过 var isReview = Model is Review

实际检测类型

我删除了模型名称的 Umbraco.Web.PublishedContentModels. 部分。没有必要,因为它们已经在 Views/Web.config.

中引用

您可以使用模型的接口,然后使用 isas 检查类型并采取相应的行动。