【问题标题】:Umbraco 7 Razor - find parentUmbraco 7 Razor - 找到父母
【发布时间】:2014-10-16 09:02:33
【问题描述】:

我正在使用 Umbraco 7,我想要一个局部视图来呈现左导航,该导航从树上的某个点开始,它会在其中找到具有特定属性集的页面。

我已经尝试过了,但它只能从树中固定深度 1 层开始工作。我想从站点内的任何深度执行此操作,并使其递归备份,直到找到一个项目并将其作为左侧导航的根。

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage

@{
    @* Get the item above this one that has a property of resetLeftNav ticked *@
    var root = CurrentPage.AncestorOrSelf(1).Children.Where("resetLeftNav").First(); 
}

<ul class="nav left-nav">
    @foreach(var page in root.Children)
    {
        <li class="">
            <a href="@page.Url">@page.Name</a>
        </li>
    }
</ul>

【问题讨论】:

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


    【解决方案1】:

    你可以使用:

    var root = Model.Content.AncestorsOrSelf().First(
                     x => x.GetPropertyValue<bool>("resetLeftNav")
                  );
    

    唯一的区别是您正在寻找一个祖先。我的会寻找所有这些,这样我就可以进行检查,然后拿第一个。

    【讨论】:

    • 你比我快 4 分钟,我的回答很像 CurrentPage.Ancestors().FirstOrDefault(x =&gt; x.GetPropertyValue&lt;bool&gt;("resetLeftNav"));
    • 感谢您的回复...我已将其删除,但出现错误:无法使用 lambda 表达式作为动态调度操作的参数,而无需先将其转换为委托或表达式树类型.
    • 我已将答案编辑为使用 Model.Content 而不是 CurrentPage,正如您所说,这是一个动态对象。
    • 实际上我刚刚注意到我现在必须使用 xxx.GetProperty("PropertyName") 来处理我的内容属性。而当我使用动态对象时,我可以只使用 xxx.PropertyName。谢谢 有什么方法可以使用动态对象来完成上述操作,因为我认为在处理属性值时更可取。
    • 那是见仁见智。我个人不这么认为:) 如果您担心使用“魔术字符串”,动态方法基本上是相同的,只是没有引号 - 您假设有一个具有该特定名称的属性。至少以我的方式,我可以拥有一个具有关键属性别名的类作为字符串const 值。使用动态也较慢。无论哪种方式,都没有允许您执行此操作的重载,抱歉。
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 2013-03-09
    • 2013-09-03
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    相关资源
    最近更新 更多