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