使用Umbraco.ModelsBuilder制作一个模板中的多种内容类型
我们有多种基本内容类型News
,Reviews
。每个从我们的复合材料继承属性:_Page
& _Article
。这使我们能够将所有三种内容类型分别归入单个文章模板。使用Umbraco.ModelsBuilder制作一个模板中的多种内容类型
目前使用IPublishedContent
,意味着我们有类似:
if (Model.Content.DocumentTypeAlias == "review")
{
// ... Do This
}
随着ModelsBuilder,我们不能再这样做了。
结果是看起来像这样的模型:
试图这样做:@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
你在施放。)
虽然你可以自由地从一个ModelsBuilder类,通常大多数,在我的经验是使用ModelsBuilder继承剃刀模板以帮助使用Route Hijacking为控制器中的标准视图模型提供水合物。
很明显,您的工作是创建和维护这些视图模型,但对于许多人来说,这是使用Umbraco或不使用Umbraco的标准做法。
由于mortenbock说,你可以做@inherits UmbracoViewPage<IArticle>
然后你实际上可以做var isReview = Model is Review
检测型我删除了车型名称的Umbraco.Web.PublishedContentModels.
一部分。这是没有必要的,因为它们已经在Views/Web.config中被引用。
这更适合对mortenbock的回答发表评论。 – trincot
您可以使用该模型的接口,然后使用is
和as
来检查类型并采取相应措施。
英雄。这正是我需要的,非常感谢。 –