未填充基于查询的属性的Sitecore Glass映射器(v3)

未填充基于查询的属性的Sitecore Glass映射器(v3),sitecore,sitecore7,glass-mapper,Sitecore,Sitecore7,Glass Mapper,更新:我正在使用Sitecore 7.0版 到目前为止,我正在使用Glass.Mapper.Sc并取得了成功。我已经成功地绘制了许多模型。我现在刚刚尝试了我的第一个查询映射,但无法使其工作 我有以下两种型号 [SitecoreType(TemplateName = "Testimonial")] public class Testimonial : ContentItem { [SitecoreField(FieldType = SitecoreFieldType.MultiLineTe

更新:我正在使用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; }

}

其中returnVal由预期项目填充。我还尝试了
/*[@@templateName='commential']
作为对映射属性的查询

我已经成功地手动检索了一个特定的证明实例,以检查它是否存在一些奇怪的映射问题

撇开这个问题不谈,Glass.Mapping.Sc和我的模型似乎一切正常。到目前为止,我已经完成了上的教程,并通过NuGet安装了Glass.Mapping.Sc

我已经查看了github上的源代码,但是没有看到任何可能导致我的问题的东西。是否有其他人遇到此问题或成功使用glass查询填充参数

更新(根据Michael的回复):
我将以下属性添加到Conditionals类中

[SitecoreQuery("./*")]
public virtual IEnumerable<AbstractModel> Children { get; set; }
[SitecoreQuery(“./*”)]
公共虚拟IEnumerable子项{get;set;}
这返回了AbstractModel的填充IEnumerable,它们是6个鉴定项目,是鉴定项目的直接子项

我也试过了

[SitecoreQuery("//*")]
public virtual IEnumerable<AbstractModel> Children { get; set; }
[SitecoreQuery(“//*”)
公共虚拟IEnumerable子项{get;set;}
得到了同样的结果。我不明白这一点,因为我希望得到的不仅仅是6份推荐信

我删除了推荐列表属性并添加了一个新属性Children,这个属性工作得非常好

[SitecoreQuery("./*[@@templatename='Testimonial']", IsRelative = true)]        
public virtual IEnumerable<Testimonial> Children { get; set; }      
[SitecoreQuery(“./*[@@templatename='Certificational']”,IsRelative=true)]
公共虚拟IEnumerable子项{get;set;}
然后,我使用resharper将属性重命名为推荐列表,然后是ZYX,然后是Blerg。这三次都不起作用(没有填充),但如果我重新命名为Children,一切都正常。奇怪

更多更新 我已经找到了为什么当属性名为“Children”时查询似乎起作用。它不起作用,这就是我得到意外结果的方式。“子项”是在所有子项上填充的公共属性。因为我的所有子项都是证明,所以可以正确填充

因此,如果我将属性更改为以下内容,它仍然正确填充

public virtual IEnumerable<Testimonial> Children { get; set; } 
公共虚拟IEnumerable子项{get;set;}

可以在Glass.Mapper.Sc.Integration.DataMappers.SitecoreChildrenMapperFixture.MapToProperty\u items\u三个子对象中看到。您的查询不是相对查询,因此需要将属性更新为:

[SitecoreQuery("/sitecore/content//*[@@templatename='Testimonial']")]
public virtual IEnumerable<Testimonial> TestimonialList { get; set; }
[SitecoreQuery(“/sitecore/content/*[@@templatename='Estimational']”)
公共虚拟IEnumerable证明列表{get;set;}
删除IsRelative意味着Glass将从解决方案的根目录进行查询。默认情况下,IsRelative标志为false

IsRelative用于指示查询与Glass加载的当前项相关。例如,如果我有一个新闻登录页,并且我想只获取具有功能标志的新闻页的子项,我可能会这样做:

[SitecoreQuery("./*[@featured='1']", IsRelative=true)]
public virtual IEnumerable<News> FeaturedNews { get; set; }
[SitecoreQuery(“./*[@featured='1']”,IsRelative=true)]
公共虚拟IEnumerable特性news{get;set;}

我希望这能解释IsRelative标志的用法,如果它不让我知道,我会为Glass网站写一篇博文。

您的查询不是相对查询,因此您需要将属性更新为:

[SitecoreQuery("/sitecore/content//*[@@templatename='Testimonial']")]
public virtual IEnumerable<Testimonial> TestimonialList { get; set; }
[SitecoreQuery(“/sitecore/content/*[@@templatename='Estimational']”)
公共虚拟IEnumerable证明列表{get;set;}
删除IsRelative意味着Glass将从解决方案的根目录进行查询。默认情况下,IsRelative标志为false

IsRelative用于指示查询与Glass加载的当前项相关。例如,如果我有一个新闻登录页,并且我想只获取具有功能标志的新闻页的子项,我可能会这样做:

[SitecoreQuery("./*[@featured='1']", IsRelative=true)]
public virtual IEnumerable<News> FeaturedNews { get; set; }
[SitecoreQuery(“./*[@featured='1']”,IsRelative=true)]
公共虚拟IEnumerable特性news{get;set;}
我希望这能解释IsRelative标志的用法,如果它不让我知道的话,我会在Glass网站上写一篇博文。

我发现了我的问题(花了几个小时搜索Glass Mapper源代码,至少我学到了一些关于Glass Mapper的知识:)。我不久前重命名了我的程序集,并且没有更改传递到{{SitecoreAttributeConfigurationLoader}的名称

一旦我改变了这个名字,我仍然无法让它工作,所以我从我的bin文件夹中删除了旧的dll,重新启动了电脑,在桌子周围跳舞了几次,唱着“工作!”!工作工作一遍又一遍地(好的,最后一位已经补好了)

之后,一切正常。

我发现了我的问题(在花了几个小时搜索Glass Mapper源代码后-至少我学到了一些关于Glass Mapper的知识:)。我不久前重命名了我的程序集,并且没有更改传递到{{SitecoreAttributeConfigurationLoader}的名称

一旦我改变了这个名字,我仍然无法让它工作,所以我从我的bin文件夹中删除了旧的dll,重新启动了电脑,在桌子周围跳舞了几次,唱着“工作!”!工作工作一遍又一遍地(好的,最后一位已经补好了)


之后,一切正常。

很抱歉造成混乱。我首先尝试了一个相对路径“/*[@@templateName='Certificalal']”,正如我文章中其他地方所说的那样。我试着把IsRelative设置为true。这条完整的道路是用相对的假和真来尝试的,两者都不起作用。相对查询也不起作用。我还尝试使用一个非常通用的类型和一个开放的Xpath查询(例如“//*”),并返回我的基本模板类型