Почему моя корневая страница Umbraco не имеет дочерних элементов, только если она является активной в данный момент страницей? - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть следующая структура страницы в Umbraco:

  • Домашняя страница
    • Управление устройствами
    • Ресурсы
      • Руководства
      • Загрузки
      • Положения и условия

В моем шаблоне Master.cshtml есть меню навигации, которое является частичнымбазовый шаблон всех этих страниц.В этом фрагменте я вызываю Model.Content.Site().Children, чтобы получить все узлы «Управление устройствами» и «Ресурсы», а затем повторяю, чтобы получить любые их узлы-потомки.

Это все работало нормально, когда все страницы использовали один и тот же документВведите (ChildNodeSelectionPage), но теперь я изменил домашнюю страницу, чтобы использовать производную форму этого типа документа (CustomChildNodeSelectionPage) для дополнительного свойства, и мне пришлось создать фиктивный контроллер (CustomChildNodeSelectionPageController) в моем проекте, который выводитот оригинального ChildNodeSelectionPageController, так что модель Master по-прежнему передается обратно в представление.

Эта часть также, кажется, работает нормально (на основании попадания точек останова в исходный контроллер), но проблема возникает, когдапросмотр поразил: теперь, по неизвестной причине, Model.Content.Site().Children имеет счетчик 0 на домашней странице, но все же, если перейти к URL-адресу любой из дочерних страниц, это 2 (как и ожидалось).

Также обратите внимание, что в домашнем документе по-прежнему используется шаблон ChildNodeSelectionPage.cshtml, хотя его тип документа теперь был изменен на использование «Страницы выбора настраиваемого дочернего узла»).

Master.cshtml (примечание: для краткости нерелевантный код опущен)

@inherits Umbraco.Web.Mvc.UmbracoViewPage<Web.Portal.Models.Master>
<!DOCTYPE html>
<html>
  <body>
        @Html.Partial("Navigation Menu")
      @RenderBody()
  </body>
</html>

Меню навигации.cshtml

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@using Umbraco.Web
@using Umbraco.Web.Models
@helper AddMenuItems(IEnumerable<IPublishedContent> menuItems)
{
  if (menuItems.Any())
  {
  <ul>
      @foreach (var menuItem in menuItems)
      {
          <li>
              @if (menuItem.Id == UmbracoContext.PageId)
              {
                  @menuItem.Name
              }
              else
              {
                  <a href="@menuItem.Url" title="@menuItem.GetPropertyValue("description")">@menuItem.Name</a>
              }
              @AddMenuItems(menuItem.Children)
          </li>
      }
  </ul>
  }
}

//NOTE: This is where the problem is when called from the `CustomChildNodeSelectionPage`.
@AddMenuItems(Model.Content.Site().Children)

ChildNodeSelectionPage.cshtml

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@{
    Layout = "Shared/Master.cshtml";
}
//NOTE: Irrelevant code omitted for brevity.

ChildNodeSelectionPageController

public class ChildNodeSelectionPageController : RenderMvcController
{
  private ActionResult Index(IPublishedContent content, CultureInfo currentCulture)
      => CurrentTemplate
      (
          new Master
          (
              content,
              currentCulture,
              new Company(0, "ACME"),
              new[]
              {
                  new Company(0, "ACME"),
                  new Company(1, "Jimbo Jones' Jimbo Burgers Inc.")
              },
              "Jiminy Jilikers"
          )
      );

  public override ActionResult Index(RenderModel model)
      => Index
      (
          model.Content,
          model.CurrentCulture
      );
}

CustomChildNodeSelectionPageController

//Exists only so that the new Document Type can call Index on ChildNOdeSelectionPageController.
public class CustomChildNodeSelectionPageController : ChildNodeSelectionPageController
{
}

1 Ответ

0 голосов
/ 26 ноября 2018

Получается, что все, что мне нужно было сделать - это вручную переиздать (кнопка «Сохранить и опубликовать» на «Содержимое») каждую страницу через CMS, и она волшебным образом снова заработала!До этой проблемы мне приходилось менять тип контента корневой страницы через базу данных, что, казалось, создавало несколько проблем (из которых я предполагаю, что это была одна из них).

Если кому-то интересноУ меня появилась идея переиздать отсюда: https://our.umbraco.com/forum/templating/templates-and-document-types/4585-Change-document-type

...