使用Orchard管理员,我创建了一个名为'Spotlight Wrapper'的新内容部分,其中包含3个HTML字段。然后,我创建了一个名为“模板1”的内容类型,并为其指定了'Spotlight Wrapper'。然后,我创建了一个名为“主页”的新“模板1”内容项。然后我创建了一个名为Fileds_Contrib.Html-Spotlight Wrapper.cshtml的文件来包装'Spotlight Wrapper'中的每个HTML字段,这样就可以了。我现在补充说:
<Place Parts_SpotlightWrapper="Content:before;Wrapper=Parts_SpotlightWrapper" />
并创建:
Views\Parts.SpotlightWrapper.cshtml
试图将整个'Spotlight Wrapper'内容部分包装成一个但似乎无法使其工作?
答案 0 :(得分:2)
你声明了一个包装器,我猜这会导致循环引用,因为你尝试用自己包装Parts_SpotlightWrapper形状。 Wrappers只是Razor(cshtml)代码的一部分,它们充当给定形状的父级。
要实现您想要的行为,您应该创建一个单独的.cshtml文件(例如MyWrapper.cshtml),其中包含必要的包装HTML代码并将其附加到您现有的部分,如下所示:
<Place Parts_SpotlightWrapper="Content:before;Wrapper=MyWrapper" />
包装器代码可以看起来像。像这样:
<ul>
@Display(Model.Child)
</ul>
顺便说一下 - 试着看看它是如何在Orchard.Widgets中完成的。有两个包装器 Widget.Wrapper 和 Widget.ControlWrapper 包装 Widget 形状。 那些声明不在Placement.info文件中(正如你所做的那样),但在Shapes.cs形状定义中硬编码,尽管最终效果完全相同。稍后将使用Placement.info的技术作为快捷方式介绍。
HTH