使用Umbraco.ModelsBuilder在一个模板中使用多个内容类型

时间:2017-08-02 11:58:46

标签: c# razor umbraco

我们有多种基本内容类型mergeNews。每个都从我们的复合材料继承属性:Reviews& _Page。这允许我们将所有三种内容类型混合到一个文章模板中。

目前使用_Article,意味着我们有类似的内容:

IPublishedContent

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

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

UML

试图做: if (Model.Content.DocumentTypeAlias == "review") { // ... Do This } ,但这意味着我失去了所有其他属性。

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

关于此的说明:我很想做_Page> _Article> ContentType,但这意味着巨大的数据丢失。

4 个答案:

答案 0 :(得分:1)

如果您执行@inherits UmbracoViewPage<Umbraco.Web.PublishedContentModels.IArticle>,那么您可以执行var review = Model as Umbraco.Web.PublishedContentModels.Review之类的操作。如果review不为空,则表示该网页的类型为Review

(顺便说一句,不能记住你是否需要Model.Content进行演员表。)

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

实际检测到这种类型

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

答案 3 :(得分:0)

您可以使用模型的界面,然后使用1000132;1000151;1000149;1000150;1000152;1000153;1000154;1000155 is来检查类型并采取相应的行动。