首先,我对Umbraco 7.4.3相对较新,所以也许我只是想以错误的方式做到这一点?我希望社区能够帮助我。我真正想要的就是Visual Studio中的IntelliSense,用于我的DocumentTypes。
我正在尝试在我的DocumentTypes中使用合成(而不是掌握DocumentTypes,这似乎是新版本中的前进方式)。但是我无法转换为组合的实例,这意味着该组合的部分视图会导致异常。
更多Detial:
DocumentTypes
模板
布局
@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)
答案 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模型的一部分?
修改强>
对不起,并不是真的想把这个作为答案,带着所有的不确定性,甚至是我自己的问题。我会留在这里,直到有人告诉我; - )