2017-02-15 9 views
0

아래로 나는 내 CMS에서 설정 한 다음 한 ContactUsPageSettings에서Sitecore 리턴 의존의 드롭이 목록

enter image description here

난 다음 그 아래에 나는 몇 가지 항목을 ContactUsQuestionsOption라는 템플릿을 사용하는 몇 가지 항목이있다 ContactUsSubQuestionOption이라는 템플릿을 사용합니다.

ContactUsQuestionsOption을 모두 내린 드롭 다운 목록에서 반환하고 싶습니다. 내가 겪고있는 문제는 선택한 항목의 자식 만 반환하는 두 번째 드롭 다운 목록을 갖는 것입니다. Faculty Research and Publications를 선택하면 위의 이미지를 보면서 BSR, 교수진 문의 및 ResearchSupportEquires를 표시하는 두 번째 드롭 다운을 원합니다.

[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 (오토 맵 = TRUE)] 공용 클래스 QuestionsViewModel : ContactUsQuestionsOption { [SitecoreQuery (".//*[@ templatekey = 'contactussubquestionsoption']", IsLazy = false, IsRelative = true)]공용 가상 IEnumerable QuestionsOptionItems {get; 세트; }

} 

하지만 이것은 대답이 아닙니다. 어떤 아이디어?

+0

** 질문 옵션 **을 사용하는 항목과 ** 하위 질문 ** 템플릿을 사용하는 항목을 명확히 할 수 있습니까? – DougCouto

+0

문제점을 명확히하기 위해 제 질문을 업데이트했습니다. – gadgetgem

+0

GlassMapper 살펴보기 부모 가이드를 노출해야한다고 생각하고 있습니다. 이것이 올바른 생각입니까? – gadgetgem

답변

0

마지막으로 해결책을 찾았습니다. GlassBase에서 상위 항목을 변경하여 상위 항목 [SitecoreParent (InferType = true)] 선언을 추가했습니다. 이제 상위 ID를 기반으로 하위 쿼리를 필터링 할 수 있습니다. 당신이 Sitecore 3 고유 한 데이터 템플릿을 가지고 있기 때문에, 당신은 3 독특한 유리 기반 모델을 필요로

+0

다행이라고 생각해 주셔서 감사합니다. 내 대답은 쿼리 ** SitecoreQuery ** 속성을 ** SitecoreChildren **으로 장식 된 속성으로 대체하여 코드를 단순화 한 것입니다. – DougCouto

0

감사

젬마 :). 또한 어떤 클래스에서든 쿼리 속성을 사용할 필요는 없으며 단순히 자식 속성을 사용할 수 있습니다.

사이드 메모는 수행하려는 작업을 수행하는 데 반드시 필요한 것은 아니지만 모든 Glass 모델에 적어도 아래 GlassBase 클래스의 속성이 있는지 확인하는 것이 도움이 될 수 있습니다.

그래서를 heres 내가 어떻게 할 것인지 : (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 
{ 
} 

무엇 각 템플릿에있는 필드

사이드 노트, 당신은 그들이 Sitecore에서 적절한 데이터 템플릿에 매핑 확인하기 위해 유리 모델의 각각의 상단에있는 SitecoreType 장식의 templateId에서 속성을 설정해야합니다. GlassBase에는 SitecoreType 데코레이터가 필요하지 않습니다.