在umbraco中渲染子页面

时间:2018-07-19 06:29:24

标签: c# umbraco parent-child

我正在尝试制作一个常见问题页面。内容结构如下:

  • 常见问题 -问题1 - 问题2 -问题3

尽管如此,我似乎仍无法弄清楚如何使子模板呈现(我是新手)。

常见问题解答条目(父页面)

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage

@{
    Layout = null;
    var faqContentId = (int)CurrentPage.faqContent;
}

<html>
    @Html.Partial("head")
    <body>
        @Html.Partial("header")

        <div class="content">
            @{
                foreach (var child in Umbraco.Content(1168).Children) {
                    // render children here
                }
            }
        </div>

        @Html.Partial("footer")
    </body>
</html>

常见问题解答条目(子页面)

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage

<div class="accordion" id="accordionExample">
    <div class="card">
        <div class="card-header" id="headingOne">
            <h5 class="mb-0">
            <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
                @Umbraco.Field("title")
            </button>
        </h5>
    </div>

    <div id="collapseOne" class="collapse show" aria-labelledby="headingOne" data-parent="#accordionExample">
        <div class="card-body">
            @Umbraco.Field("answer")
        </div>
    </div>
</div>

2 个答案:

答案 0 :(得分:0)

它应该类似于@ Html.Partial(“ FAQ Entry”,child),其中第二个参数是要传递到部分视图的模型(子对象)。

答案 1 :(得分:0)

欢迎我亲爱的Umbraco开发人员。让我为您指出几个方向:

如果只需要解决方案,请跳至第3位。

1)不要使用@inherits Umbraco.Web.Mvc.UmbracoTemplatePage,因为它很快就会被弃用。使用@inherits Umbraco.Web.Mvc.UmbracoViewPage代替,这将使您在视图中获得强类型的内容,并且代码将类似于@ Model.GetPropertyValue(“ myValue”)

更好的是,创建一个自定义模型或尝试使用Umbraco ModelsBuilder

这将为您提供更清晰的代码和与强类型模型的更强绑定。但这是另一天。

2)我不建议像这样用id Umbraco.Content('id').Children来抓取节点。原因是,如果您出于某种原因删除了该节点,然后稍后使用相同的名称再次创建该节点,则ID将有所不同,并且您的代码将破坏网站。

在此页面上,人们向我指出了遍历umbraco Umbraco traversing的正确方法

它讨论速度,但基本上也向您显示了正确的遍历方法。您还可以在Umbraco的文档中找到所需的其余部分。

3)对于实际问题:我假设您所在的页面是父页面,而您只是想抓住孩子。然后就这么简单:

var collection = Model.Content.Children();
@foreach (var child in collection ) {

    child.GetPropertyValue("yourValueAliasHere")
}

如果您使用的是@inherits Umbraco.Web.Mvc.UmbracoViewPage,那么您将:

var collection = Model.Children();
@foreach (var child in Model.Children()) {

    child.GetPropertyValue("yourValueAliasHere")
}