更新:我使用的是 Sitecore 7.0 版
到目前为止,我正在成功使用 Glass.Mapper.Sc。我已经成功映射了许多模型。我现在刚刚尝试了我的第一个查询映射,但无法让它工作。
我有以下两种型号
[SitecoreType(TemplateName = "Testimonial")]
public class Testimonial : ContentItem
{
[SitecoreField(FieldType = SitecoreFieldType.MultiLineText)]
public virtual string Summary { get; set; }
[SitecoreField(FieldType = SitecoreFieldType.RichText)]
public virtual string Testimony { get; set; }
[SitecoreField]
public virtual string Testifier { get; set; }
[SitecoreField(FieldType = SitecoreFieldType.GeneralLink)]
public virtual Link TestifierUrl { get; set; }
[SitecoreField]
public virtual string Company { get; set; }
}
和
[SitecoreType(TemplateName = "Testimonials")]
public class Testimonials : ContentFeatureItem
{
public Testimonials()
{
TestimonialList = new List<Testimonial>();
}
[SitecoreQuery("/sitecore/content//*[@@templatename='Testimonial']", IsRelative = true)]
public virtual IEnumerable<Testimonial> TestimonialList { get; set; }
}
根据教程,我应该期望 TestimonialList 填充有 Testimonial 项目列表。但是,列表始终为空。
我已经通过使用 sitecore 的开发人员工具中的 XPath 构建器以及通过以下使用 Sitecore API 来检查路径是否有效。
var query = new Query("/sitecore/content//*[@@templateName='Testimonial']");
var returnVal = query.Execute();
returnVal 填充了预期的项目。我也尝试过./*[@@templateName='Testimonial']
作为映射属性的查询。
我已经成功地手动检索了一个特定的 Testimonial 实例,以检查这不是一些奇怪的映射问题。
除了这个问题,Glass.Mapping.Sc 和我的模型似乎一切正常。到目前为止,我已经按照glass.lu上的教程进行操作,并且通过 NuGet 安装了 Glass.Mapping.Sc。
我查看了 github 上的源代码,但看不到任何可能导致我的问题的东西。有没有其他人遇到过这个问题或成功使用带有玻璃的查询填充参数?
更新(根据迈克尔的回复):
我在 Testimonials 类中添加了以下属性
[SitecoreQuery("./*")]
public virtual IEnumerable<AbstractModel> Children { get; set; }
这返回了一个已填充的 AbstractModel 的 IEnumerable,它们是作为 Testimonials 项的直接子项的 6 个 Testimonial 项。
我也试过
[SitecoreQuery("//*")]
public virtual IEnumerable<AbstractModel> Children { get; set; }
并得到相同的结果。我不明白那个,因为我希望得到比 6 个推荐更多的项目。
我删除了 TestimonialList 属性并添加了一个新属性 Children,并且该属性完美运行
[SitecoreQuery("./*[@@templatename='Testimonial']", IsRelative = true)]
public virtual IEnumerable<Testimonial> Children { get; set; }
然后我使用 resharper 将属性重命名为 TestimonialList,然后是 ZYX,然后是 Blerg。所有三次都没有工作(没有填充),但如果我重命名回儿童,一切都很好。奇怪的。
更多更新 我发现为什么当属性被命名为“儿童”时查询似乎正在工作。它不起作用,这是我得到意想不到的结果的方式。“Children”是填充在所有子项上的公共属性。因为我所有的子项目都是推荐书,所以可以正确填充。
因此,如果我将我的属性更改为以下内容,它仍然会正确填充
public virtual IEnumerable<Testimonial> Children { get; set; }
见于 Glass.Mapper.Sc.Integration.DataMappers.SitecoreChildrenMapperFixture.MapToProperty_ItemHasThreeChildren_ThreeObjectsAreCreated。