我在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; }
}
这样的第二个视图模型:
[SitecoreType(AutoMap = true)] 公共类QuestionsViewModel:ContactUsQuestionsOption { [SitecoreQuery(“.// * [@ templatekey ='contactussubquestionsoption']”,IsLazy = false,IsRelative = true)] public virtual IEnumerable QuestionsOptionItems {get;组; }
}
但这似乎不是答案。有什么想法吗?
答案 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 装饰器。