Sitecore返回相关下拉列表

时间:2017-02-15 14:41:01

标签: sitecore sitecore8 glass-mapper

我在CMS中设置了以下内容

enter image description here

在ContactUsPageSettings下我有一些项目使用名为ContactUsQuestionsOption的模板,然后在下面我有一些项目正在使用名为ContactUsSubQuestionOption的模板。

我想在下拉列表中返回所有ContactUsQuestionsOption,我已设法做到这一点。我遇到的问题是有第二个下拉列表,它只返回所选项目的子项。如果教师研究和出版物被选中,请看上面的图像,我希望第二次下载显示BSR,教师咨询和研究支持查询。

我有一个看起来像这样的视图模型:

    [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(AutoMap = true)]     公共类QuestionsViewModel:ContactUsQuestionsOption     {         [SitecoreQuery(“.// * [@ templatekey ='contactussubquestionsoption']”,IsLazy = false,IsRelative = true)]         public virtual IEnumerable QuestionsOptionItems {get;组; }

}

但这似乎不是答案。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。我在GlassBase中更改了我的父项,在Parent之上添加了声明[SitecoreParent(InferType = true)]。我现在可以根据父ID过滤我的子请求。

谢谢

杰玛:)

答案 1 :(得分:0)

由于Sitecore中有3个独特的数据模板,因此您需要3个独特的基于Glass的模型。此外,您不必在任何类中使用查询属性,只需使用子级属性。

附注,虽然没有必要完成您要做的事情,但您可能会发现确保所有Glass模型至少具有以下GlassBase类中的属性是有帮助的。

所以我会做什么:

创建一个包含这些属性的基类,并更新所有其他Glass模型以继承此类,并且它们将正确映射子属性(以及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
{
}

我遗漏了映射到这些模板中每个字段的属性,因为我不知道您在每个模板中有哪些字段。

附注,请确保在每个Glass模型的顶部设置 SitecoreType 装饰器的 TemplateId 属性,以确保它们映射到正确的数据模板中Sitecore的。 GlassBase 不需要 SitecoreType 装饰器。

相关问题