合成,强类型视图和部分视图(使用合成继承)

时间:2016-05-19 11:00:56

标签: umbraco umbraco7

首先,我对Umbraco 7.4.3相对较新,所以也许我只是想以错误的方式做到这一点?我希望社区能够帮助我。我真正想要的就是Visual Studio中的IntelliSense,用于我的DocumentTypes。

我正在尝试在我的DocumentTypes中使用合成(而不是掌握DocumentTypes,这似乎是新版本中的前进方式)。但是我无法转换为组合的实例,这意味着该组合的部分视图会导致异常。

更多Detial:

DocumentTypes

  • 作文(文件夹)
    • Seo - DocType
  • 主页 - DocType(使用Seo Composistion)

模板

布局

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@{
    Layout = null;
}

<html>
    <head>
        @RenderSection("Head", required: false)
    </head>
        @RenderBody()
    <body>
    </body>
</html>

主页

@inherits Umbraco.Web.Mvc.UmbracoViewPage<Home>
@using Umbraco.Web.CompiledViewModels
@{
    Layout = "Layout.cshtml";
}
@Section Head
{
    @Html.Partial("Seo")
}

<h1>My new home page</h1>

Seo(部分)

@inherits Umbraco.Web.Mvc.UmbracoViewPage<Seo>
@using Umbraco.Web.CompiledViewModels

<title>Model.Title</title>

然而,当我查看主页时,我收到的错误是&#34; Home&#34;类型无法转换为&#34; Seo&#34;类型。

查看已创建的模型,我可以看到&#34; Seo&#34;模型有一个相应的界面&#34; ISeo&#34;这是由&#34; Home&#34;实现的。所以我不太确定为什么它不能在这些类型之间进行转换。

我想为我的作品使用stronly类型的PartialViews - 这是错的吗?我应该使用其他东西吗?

我自己尝试过铸造模型,没有任何快乐。

@Html.Partial("Seo", Model as Seo)

2 个答案:

答案 0 :(得分:2)

因为DocType可以分配多个组合,所以它们不能在组合的doc类型上使用继承,因为它不可能从C#中的多个类继承。相反,他们会像您在帖子中提到的那样创建一个接口,然后doctype类和组合类都会实现它。然后,如果我没记错doctype上的属性,那么在composition类上调用静态方法来获取值。因此,您应该能够使用界面:

,而不是在partial中使用以下内容
@inherits Umbraco.Web.Mvc.UmbracoViewPage<Seo>

请改用:

@inherits Umbraco.Web.Mvc.UmbracoViewPage<ISeo>

答案 1 :(得分:0)

我认为,在前端,无论您使用何种模型/文档类型,都会被视为一个文档类型,无论它是由哪个组成的。没有理由投出任何东西,因为Seo doctype中的任何属性都应该是模型的一部分。至少这是我的理解。

我不知道ModelsBuilder作为核心的一部分工作得很好,但是AFAIK应该提供强类型模型(和IntelliSense)。您是否检查过Seo属性是否已经是Home模型的一部分?

修改

对不起,并不是真的想把这个作为答案,带着所有的不确定性,甚至是我自己的问题。我会留在这里,直到有人告诉我; - )