Sitecore退货相关下拉列表

Sitecore退货相关下拉列表,sitecore,sitecore8,glass-mapper,Sitecore,Sitecore8,Glass Mapper,我在CMS中设置了以下内容 在ContactUsPageSettings下,我有一些项目正在使用名为ContactUsQuestionsOption的模板,在下面,我有一些项目正在使用名为ContactUsSubQuestionOption的模板 我想在一个下拉列表中返回所有ContactUsQuestionsOption,这是我设法做到的。我遇到的问题是第二个下拉列表只返回所选项目的子项。查看上图,如果选择了教员研究和出版物,我希望第二个下拉列表显示BSR、教员查询和研究支持查询 我的视图模

我在CMS中设置了以下内容

在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; }

}

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

我终于想出了解决办法。我在GlassBase中更改了父项,并在父项上方添加了声明[SitecoreParent(InferType=true)]。我现在可以根据家长id筛选子问题

谢谢


Gemma:)

由于Sitecore中有3个独特的数据模板,因此需要3个独特的基于玻璃的模型。此外,您不必在任何类中使用query属性,只需使用Children属性即可

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

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

    [SitecoreChildren(InferType = true)]
    public GlassBase Children { get; set; }
}
请注意,虽然您不需要完成您正在尝试的操作,但您可能会发现确保所有玻璃模型至少具有以下GlassBase类中的属性是有帮助的

所以我会这么做:

创建包含这些属性的基类,并更新所有其他玻璃模型以继承此类,这样它们将正确映射子属性(以及父属性)

现在,特定于模板的模型可以简单地继承此类:

[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
{
}
我省略了映射到这些模板中每个字段的属性,因为我不知道每个模板中都有哪些字段


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

您能澄清哪些项目正在使用问题选项,哪些项目正在使用子问题模板吗?我已经更新了我的问题以澄清我的问题。查看GlassMapper,我认为我需要公开父guid。这是正确的主意吗?很高兴你能想出这个主意。在我的回答中,您将看到我通过使用SitecoreChildren装饰的属性替换查询SitecoreQuery属性简化了代码。
[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
{
}