Umbraco Razor навигация доступа к пользовательским полям - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь создать навигацию, которая автоматически включает определенные страницы в зависимости от настроек в CMS.

Я использовал карту сайта Partial Macro и попытался добавить оператор if, который проверяет свойство страницы следующим образом: @if (!item.HideSubPages) {

Однако я просто получаю следующую ошибку:

Umbraco.Core.Models.IPublishedContent' does not contain a definition for 'HideSubPages' and no extension method 'HideSubPages' accepting a first argument of type 'Umbraco.Core.Models.IPublishedContent' could be found (are you missing a using directive or an assembly reference?)

Вот мой полный код

@inherits Umbraco.Web.Macros.PartialViewMacroPage
@using Umbraco.Core.Models
@using Umbraco.Web


@*
    This snippet makes a list of links of all visible pages of the site, as nested unordered HTML lists.

    How it works:
    - It uses a custom Razor helper called Traverse() to select and display the markup and links.
*@

@{ var selection = Model.Content.Site(); }

<div class="sitemap">
    @* Render the sitemap by passing the root node to the traverse helper, below *@
    @Traverse(selection)
</div>


@* Helper method to traverse through all descendants *@
@helper Traverse(IPublishedContent node)
{
    @* Update the level to reflect how deep you want the sitemap to go *@
    const int maxLevelForSitemap = 4;

    @* Select visible children *@
    var selection = node.Children.Where(x => x.IsVisible() && x.Level <= maxLevelForSitemap).ToArray();

    @* If any items are returned, render a list *@
    if (selection.Length > 0)
    {
        <ul>
            @foreach (var item in selection)
            {
            <li class="level-@item.Level">
                <a href="@item.Url">@item.Name</a>
                
                @* Run the traverse helper again for any child pages *@
                @if (!item.HideSubPages) {
                    @Traverse(item)
                }

            </li>
            }
        </ul>
    }
}

1 Ответ

0 голосов
/ 02 июля 2018

Попробуйте

item.GetPropertyValue<bool>("hideSubPages") 

вместо

Вы ожидаете динамический тип, но имеете дело с IPublishedContent. Динамика, в любом случае, не является доказательством использования в будущем, так как их поддержка закончится в следующей «большой» версии Umbraco (v8), я полагаю. Так GetProperty / GetPropertyValue ваш друг: -)

...