2017-02-15 29 views
0

Я следующий набор в моей CMSSitecore возврата зависит выпадающий список

enter image description here

Под ContactUsPageSettings я некоторые элементы, которые используют шаблон под названием ContactUsQuestionsOption, а затем ниже, что у меня есть некоторые элементы, которые используя шаблон, называемый ContactUsSubQuestionOption.

Я хочу вернуть все ContactUsQuestionsOption в раскрывающемся списке, который мне удалось сделать. Проблема, с которой я столкнулась, - это иметь второй раскрывающийся список, который возвращает только дочерние элементы выбранного элемента. Если посмотреть на изображение выше, если были выбраны факультетские исследования и публикации, я бы хотел, чтобы вторая группа показала BSR, запросы факультета и ResearchSupportEnquiries.

У меня есть модель представления, выглядит следующим образом:

[SitecoreType(AutoMap = true)] 
public class ContactUsPageSettingsViewModel : ContactUsPageSettings 
{ 
    [SitecoreQuery(".//*[@@templatekey='contactusquestionsoption']", IsLazy = false, IsRelative = true)] 
    public IEnumerable<ContactUsQuestionsOption> QuestionsOptionItems { get; set; } 

    [SitecoreQuery("./child::*", IsLazy = true, IsRelative = true)] 
    public virtual IEnumerable<ContactUsPageSettingsViewModel> Children { get; set; } 

} 

И вторая модель представления, как это:

[SitecoreType (автокарта = истина)] QuestionsViewModel общественного класса: ContactUsQuestionsOption { [SitecoreQuery (".//*[@@ templatekey = 'contactussubquestionsoption']", IsLazy = false, IsRelative = true)] общедоступный виртуальный IEnumerable QuestionsOptionItems {get; задавать; }

} 

Но это, похоже, не является ответом. Есть идеи?

+0

Можете ли вы уточнить, какие элементы используют ** Вопрос ** ** и какие элементы используют ** Sub Question ** template? – DougCouto

+0

Я обновил свой вопрос, чтобы уточнить мою проблему. – gadgetgem

+0

Глядя на GlassMapper Я думаю, мне нужно разоблачить родителя. Это правильная идея? – gadgetgem

ответ

0

Я, наконец, разработал решение для этого. Я изменил родительский элемент в GlassBase, добавив объявление [SitecoreParent (InferType = true)] выше родителя. Теперь я могу отфильтровать мои подзапросы на основе родительского идентификатора.

Благодаря

Джемма :)

+0

Рад, что вы смогли понять это. В моем ответе вы увидите, что я упростил ваш код, заменив свойства запроса ** SitecoreQuery ** на свойство, украшенное ** SitecoreChildren **. – DougCouto

0

Поскольку у вас есть 3 уникальных шаблонов данных в Sitecore, вам нужно 3 уникальные модели на основе стекла. Кроме того, вам не нужно использовать свойство запроса в любом из классов, вы можете просто использовать свойство Children.

Обратите внимание, что, несмотря на то, что вам не нужно делать то, что вы пытаетесь сделать, вам может быть полезно убедиться, что все ваши модели стекла имеют, по крайней мере, свойства в классе GlassBase ниже.

Так Вот что я хотел бы сделать:

Создать базовый класс, который содержит эти свойства и обновить все другие модели из стекла, чтобы наследовать этот класс, и они будут иметь свойство детей правильно отображаются (а также свойство Parent) ,

public class GlassBase 
{ 
    public Guid Id { get; set; } 

    [SitecoreParent(InferType = true)] 
    public GlassBase Parent { get; set; } 

    [SitecoreChildren(InferType = true)] 
    public GlassBase Children { get; set; } 
} 

Теперь ваши модели шаблонов конкретных может просто наследовать этот класс:

[SitecoreType(TemplateId = "Id of Data Template", AutoMap = true)] 
public class ContactUsPageSettings : GlassBase 
{ 
} 

[SitecoreType(TemplateId = "Id of Data Template", AutoMap = true)] 
public class ContactUsQuestionsOption : GlassBase 
{ 
} 

[SitecoreType(TemplateId = "Id of Data Template", AutoMap = true)] 
public class ContactUsSubQuestionOption : GlassBase 
{ 
} 

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

Примечание стороны, убедитесь, что вы установите TemplateId атрибут SitecoreType декоратора в верхней части каждой из ваших моделей стекла, чтобы гарантировать, что они отображаются на собственных шаблонов данных в Sitecore. GlassBase не нужен SitecoreType декоратор.