Orchardcms 覆盖区域渲染

Orchardcms 覆盖区域渲染,orchardcms,Orchardcms,我试图覆盖实际区域模板的渲染 它呈现如下内容: <div class="zone zone-hero" shape-id="13"> <div class="inner" shape-id="14"> content is stuffed in here </div> </div> 内容被塞进这里 我发现,如果我将Zone.cshtml放在模板的根目录中,我可以覆盖它的呈现。我不明白的是,如果它

我试图覆盖实际区域模板的渲染

它呈现如下内容:

<div class="zone zone-hero" shape-id="13">      

    <div class="inner" shape-id="14">
        content is stuffed in here
    </div>

</div>

内容被塞进这里

我发现,如果我将Zone.cshtml放在模板的根目录中,我可以覆盖它的呈现。我不明白的是,如果它存在,如何让它呈现它的小部件和内容。我尝试使用@Display(Model.Content),但没有成功。

您需要做的是枚举它自身下的形状,并对每个形状调用Display。强制转换为IEnumerable应该可以做到这一点。

您可以按照Bertrand的建议执行(这使您能够更好地控制区域中每个元素的渲染),或者执行
@DisplayChildren(Model)
此模板尊重形状的属性和类属性,并根据Orchard的约定设置Id字段。因此,对于开发人员来说,使用此代码的模板的行为完全符合预期

@{
    Model.Id = string.Concat("zone-", Model.Hint.ToLowerInvariant());
    var tag = Tag(Model, "section");
}
@tag.StartElement
@DisplayChildren(Model)
@tag.EndElement

例如,如果要覆盖内容区域,请在主题项目的“视图”文件夹中创建一个名为
zone Content.cshtml
的页面,并将上面的代码复制到其中。

外加一个页面,用于解释如何覆盖特定区域的模板。无需手动设置
Model.Id
(如果未设置
Model.Hint
,它将抛出并出错。)如果您只需删除该行并将“section”替换为“div”,您将获得与
Orchard.Core.Shapes.corehapes
中的默认区域形状完全相同的结果。