обновления: Я использую Sitecore версию 7.0Sitecore Glass Mapper (v3) для запроса собственности на основании не заполняется
Я использую Glass.Mapper.Sc с успехом до сих пор. У меня есть ряд моделей, которые успешно отображаются. Теперь я просто попробовал свое первое сопоставление запросов и не могу заставить его работать.
У меня есть следующие две модели
[SitecoreType(TemplateName = "Testimonial")]
public class Testimonial : ContentItem
{
[SitecoreField(FieldType = SitecoreFieldType.MultiLineText)]
public virtual string Summary { get; set; }
[SitecoreField(FieldType = SitecoreFieldType.RichText)]
public virtual string Testimony { get; set; }
[SitecoreField]
public virtual string Testifier { get; set; }
[SitecoreField(FieldType = SitecoreFieldType.GeneralLink)]
public virtual Link TestifierUrl { get; set; }
[SitecoreField]
public virtual string Company { get; set; }
}
и
[SitecoreType(TemplateName = "Testimonials")]
public class Testimonials : ContentFeatureItem
{
public Testimonials()
{
TestimonialList = new List<Testimonial>();
}
[SitecoreQuery("/sitecore/content//*[@@templatename='Testimonial']", IsRelative = true)]
public virtual IEnumerable<Testimonial> TestimonialList { get; set; }
}
Согласно статье я должен ожидать, что TestimonialList заполняться со списком Благодарственное пунктов. Однако список всегда пуст.
Я проверил, что путь действителен как с помощью XPath-конструктора в Инструментах разработчика sitecore, так и с помощью использования API Sitecore.
var query = new Query("/sitecore/content//*[@@templateName='Testimonial']");
var returnVal = query.Execute();
Где returnVal заполняется ожидаемыми предметами. Я также попробовал ./*[@@templateName='Testimonial']
как запрос атрибута сопоставления.
Я успешно вручную извлек конкретный экземпляр Testimonial, чтобы проверить, что это не какая-то странная проблема с отображением.
Этот вопрос в стороне, все, кажется, работает правильно с Glass.Mapping.Sc и моими моделями. До сих пор я следил за учебниками по glass.lu, и я установил Glass.Mapping.Sc через NuGet.
Я посмотрел источник на github, но не вижу ничего, что может вызвать мою проблему. Кто-нибудь еще имел эту проблему или успешно использовал запрошенные заполненные параметры со стеклом?
UPDATE (После ответа Майкла):
Я добавил следующее свойство к классу Отзывов
[SitecoreQuery("./*")]
public virtual IEnumerable<AbstractModel> Children { get; set; }
Возвращаемому населенная IEnumerable из AbstractModel, которые были на 6 пунктов Благодарственных, которые являются прямыми потомками Пункт отзывов.
Я также попытался
[SitecoreQuery("//*")]
public virtual IEnumerable<AbstractModel> Children { get; set; }
и получил тот же результат. Я не понимаю этого, потому что я бы ожидал получить гораздо больше предметов, чем только 6 отзывов.
Я удалил свойство TestimonialList и добавили новое свойство, детей, и это свойство работает отлично
[SitecoreQuery("./*[@@templatename='Testimonial']", IsRelative = true)]
public virtual IEnumerable<Testimonial> Children { get; set; }
Затем я использовал ReSharper переименовать свойство TestimonialList, а затем ZYX, затем Blerg. Все три раза это не сработало (не заполняло), но если я переименую обратно в Children, все будет в порядке. Странный.
Подробнее Обновление Я выяснил, почему запрос работал, когда свойство называется «Дети». Это не работает, и я получаю неожиданные результаты.«Дети» - это общее свойство, которое заполнено всеми Детскими предметами. Поскольку все мои дочерние элементы являются рекомендациями, это может быть правильно заполнено.
Так что, если я изменю свое имущество только после него все еще правильно заселена
public virtual IEnumerable<Testimonial> Children { get; set; }
Seen в Glass.Mapper.Sc.Integration.DataMappers.SitecoreChildrenMapperFixture.MapToProperty_ItemHasThreeChildren_ThreeObjectsAreCreated.
Извините за путаницу. Сначала я попробовал относительный путь "./*[@@templateName='Testimonial ']", как говорится в другом месте моего сообщения. Я попробовал это с установкой IsRelative в true. Полный путь был проверен с IsRelative false и true и не работал. Относительный запрос тоже не работает. Я также попытался использовать очень общий тип и открытый запрос Xpath (например, «// *») и вернуть шаблон базового шаблона, и это тоже не сработало. –