在Razor中通过动态节点的RelatedLinks属性循环时出错

在Razor中通过动态节点的RelatedLinks属性循环时出错,razor,foreach,umbraco7,asp.net-mvc-5,Razor,Foreach,Umbraco7,Asp.net Mvc 5,我有一个显示我的站点导航的Razor部分: @inherits Umbraco.Web.Mvc.UmbracoTemplatePage @{ var home = CurrentPage.Site(); umbraco.NodeFactory.Node navigationSettingsNode = MySite.Umbraco.NavigationSettings; dynamic navigationSettings = new umbraco.MacroEngin

我有一个显示我的站点导航的Razor部分:

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@{
    var home = CurrentPage.Site();
    umbraco.NodeFactory.Node navigationSettingsNode = MySite.Umbraco.NavigationSettings;
    dynamic navigationSettings = new umbraco.MacroEngines.DynamicNode(navigationSettingsNode.Id);
    var settings = home.Children.Where("DocumentTypeAlias == \"Settings\"").First();
}


@if (navigationSettings.HasValue("topNavigation"))
{
    <ul>
        dynamic topNavigation = navigationSettings.topNavigation;
        var topNavigation2 = settings.topNavigation;
        <span>@topNavigation</span>
        <span>@topNavigation2</span>

        foreach(dynamic item in topNavigation)
        {
        <li>
            <a href="@item.link" title="@item.title">@item.caption</a>
        </li>
        }
    </ul>
我不想再使用变量设置,我只想使用动态导航设置变量。为了获得正确的导航设置节点,我需要进行一些操作,我不想在每个视图中粘贴相同的代码,我想使用它,所以我希望它可以从dll访问,并且可以在任何地方使用

此外,my Umbraco中的navigationSettings节点位于主内容树之外,因此不是主目录树的子目录

为什么不起作用?两者

        dynamic topNavigation = navigationSettings.topNavigation;
        var topNavigation2 = settings.topNavigation;
生成相同的json结果,两者都是动态对象

如何使其正确工作


我使用的是MVC 5.2.3,它看起来像topNavigation属性是一个字符串,因此当你调用它的每个属性时,它会遍历字符串中的字符

另外,不要使用NodeFactory,它已被弃用。您应该改为使用IPPublishedContent

我会使用强类型内容对象而不是动态对象,因为a)它们更快,b)它们更易于使用


这里有一篇很好的文章解释了获取内容的不同方式:

使用动态对象而不是类型化对象有什么原因吗?我个人从不使用动态,因为输出是如此unpredictable@Mark是的,我在翁布拉科论坛上得到了答案,我;我现在正在使用TypedContent。非常感谢。
        dynamic topNavigation = navigationSettings.topNavigation;
        var topNavigation2 = settings.topNavigation;