Отображение содержимого публикации в piranha cms

#asp.net-core #piranha-cms

#asp.net-ядро #piranha-cms

Вопрос:

Я пытаюсь отобразить содержимое страницы в том виде, в каком она была сохранена в части менеджера.

На мой взгляд, у меня есть следующий код:

 @foreach (var block in Model.Blocks)
    {
      if (block is HtmlBlock htmlBlock)
      {
        <partial name="../Cms/DisplayTemplates/HtmlBlock.cshtml" for="@htmlBlock" />
      }
      if (block is HtmlColumnBlock columnBlock)
      {
        <partial name="../Cms/DisplayTemplates/HtmlColumnBlock.cshtml" for="@columnBlock" />
      }
      if (block is ImageBlock imageBlock)
      {
        <partial name="../Cms/DisplayTemplates/ImageBlock.cshtml" for="@imageBlock" />
      }
      if (block is QuoteBlock quoteBlock)
      {
        <partial name="../Cms/DisplayTemplates/ImageBlock.cshtml" for="@quoteBlock" />
      }
      if (block is TextBlock textBlock)
      {
        <partial name="../Cms/DisplayTemplates/TextBlock.cshtml" for="@textBlock" />
      }
    }
  

Я почти уверен, что есть более простой способ сделать это, но я не могу найти ничего другого.

Итак, если я использую этот подход, при создании новых элементов в диспетчере мне придется продолжать расширять этот foreach? Что-то кажется неправильным.

Если я использую @Html.DisplayFor(m => m.Blocks) , отображается только имя пространства имен. Есть мысли?

Ответ №1:

Найдено решение: чтобы использовать @Html.DisplayFor (m => m.Blocks), у вас должны быть шаблоны отображения для используемых блоков либо в папке общих представлений, либо в виде вложенной папки внутри папки, в которой вы используете @Html.DisplayFor (m => m.Blocks).

Например, у нас есть следующие папки:

Views
Articles
Index.cshtml
Shared
SomeOtherFolder

Возможными решениями для использования @Html.DisplayFor(m => m.Blocks) в файле Index.cshtml внутри папки Articles являются:

Наличие папки DisplayTemplates (с шаблонами блоков) внутри статей в общей папке.

Надеюсь, это поможет