【问题标题】:Nested Partial View嵌套局部视图
【发布时间】:2017-09-18 11:03:53
【问题描述】:

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

我想知道是否可以在 foreach 语句中嵌套一个局部视图,然后根据父 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>

我需要以某种方式在称为 FooterStubs 的 Partial 中识别上述 foreach。这可以用@inherits Umbraco.Web.Mvc.UmbracoViewPage&lt;IPublishedContent&gt;Model.GetPropertyValue&lt;IEnumerable&lt;IPublishedContent&gt;&gt; 来完成吗?如果可以的话怎么办?

谢谢!

【问题讨论】:

  • 请包含FooterStubs的内容,尤其是前6行。
  • 目前在 FooterStubs 中只有这一行,因为这让我感到困惑:@inherits Umbraco.Web.Mvc.UmbracoViewPage
  • 所以你有两个局部视图,你想把一个引用到另一个?或者你有两个 PV(局部视图)相互引用意味着他们互相调用......?如果上面是您的“Three_Column_Footer”代码,则令人困惑

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


【解决方案1】:

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

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

然后在你的部分:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2013-11-19
    • 1970-01-01
    • 2013-11-20
    • 2013-05-08
    • 2013-08-29
    相关资源
    最近更新 更多