嵌套的部分视图

时间:2017-09-18 11:03:54

标签: c# asp.net-mvc razor umbraco

在我们的网站上,客户端可以在页脚列中添加不同的项目,即文本框。我们希望能够在一个局部视图中保留这些不同项目的代码,因为这些项目在网站的其他区域中使用,并且希望将代码重复保持在最低限度。

我想知道是否可以在foreach语句中嵌套Partial View,然后根据父foreach传递if语句。

我在名为Three_Column_Footer的部分视图中有以下代码:

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@{
        var root = Model.Content.Site();
        var thefooter = root.FirstChild("footer").Children();
    }
    <footer class="footer color-main">
        <div class="container">
            <div class="row">
                @foreach(var foot in thefooter){
                    var childcol = foot.Children;
                        <div class="col-6">
                            @foreach(var item in childcol){
                                @Html.Partial("Footers/FooterStubs", item)
                            }
                        </div>
                }
            </div>
        </div>
    </footer>

我需要将以上foreach在Partial中识别为FooterStubs。可以使用@inherits Umbraco.Web.Mvc.UmbracoViewPage<IPublishedContent>Model.GetPropertyValue<IEnumerable<IPublishedContent>>完成此操作 - 如果是这样的话?

谢谢!

1 个答案:

答案 0 :(得分:0)

Partial方法有一个接受additionalViewData的重载。您可以利用它来提供您需要部分拥有的任何其他上下文:

@Html.Partial("Footers/FooterStubs", item, new ViewDataDictionary(ViewData)
{
    { "foot": foot }
});

然后在你的部分:

@{
    var foot = ViewData["foot"] as YourFootClass;
}

我不确定你在偏爱中实际需要什么信息,但你实际上可以用这种方式添加你喜欢的任何内容。请记住,ViewData是一个动态字典,因此您必须输入任何内容。