Umbraco.ModelsBuilder 一个模板中的多种内容类型
Multiple content types in one template with Umbraco.ModelsBuilder
我们有多种基本内容类型 News
、Reviews
。每个都从我们的复合材料中继承属性:_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.
中引用
您可以使用模型的接口,然后使用 is
和 as
检查类型并采取相应的行动。
我们有多种基本内容类型 News
、Reviews
。每个都从我们的复合材料中继承属性:_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.
您可以使用模型的接口,然后使用 is
和 as
检查类型并采取相应的行动。