Реализация List.cshtml для Projection throws "Orchard.ContentManagement.ContentItem" не содержит определения для "TagsPart",

Я внедрил List.cshtml для создания пользовательского экрана для галереи изображений. Это первый раз, когда я попытался переопределить Projection с шаблоном, и сначала он работал нормально. Затем я заметил, что когда я пытаюсь получить доступ к Projection на бэкэнде, Orchard 1.7 падает с:

RuntimeBinderException 'Orchard.ContentManagement.ContentItem' не содержит определения для 'TagsPart'

Вот код из шаблона List.cshtml:

List<tagrecord> uniqueTags = new List<tagrecord>();
List<dynamic> items = Model.Items;

if (items != null && items.Any())
{
 foreach (var item in items)
 {
 if (item != null && item.ContentItem != null)
 {
 TagsPart part = item.ContentItem.TagsPart;
 if (part != null && part.CurrentTags != null)
 {
 foreach (var t in part.CurrentTags)
 {
 if (!uniqueTags.Contains(t))
 {
 uniqueTags.Add(t);
 }
 }
 }
 }
 }
</dynamic></tagrecord></tagrecord>

Я не осведомлен о нескольких моментах, которые, как я подозреваю, могут вызывать ошибку:

  1. Как указать шаблон для проекции (более конкретно, чем "List.cshtml"). Можно ли использовать Placement.info? Как?

  2. Как проверить наличие конкретной части в ContentItem? Просто TagsPart part = item.ContentItem.TagsPart; выдает исключение выше.

ОБНОВЛЕНИЕ: я реализовал это как модуль; то есть List.cshtml находился в папке "Представления" простого модуля. Если я перемещу List.cshtml в Theme, проблема исчезнет. Тем не менее, я бы предпочел использовать модуль, чтобы макет не зависел от темы.

2 ответа

Orchard 1.7 включает в себя новый агент макета запроса под названием "Shape". Я просто использовал этого провайдера, дал ему тип формы "LightboxIsotope" и создал представление под названием "LightboxIsotope.cshtml".


В проекции вы можете настроить html, отображаемый для каждого свойства в Списке. Чтобы выполнить это, вам нужно перейти к вашему запросу и добавить новый макет, выбрать нужные вам свойства и установить все, что хотите.

Если макеты, представленные в модуле запросов, не полностью соответствуют вашим требованиям, вы всегда можете создать свой собственный поставщик макетов, на этом блоге показан пример:

http://www.stevetaylor.me.uk/image-carousel-using-twitter-bootstrap-and-orchard-cms-projections

licensed under cc by-sa 3.0 with attribution.