#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 (с шаблонами блоков) внутри статей в общей папке.
Надеюсь, это поможет