Rob*_*ray 1 sitecore sitecore7 glass-mapper
更新:我正在使用Sitecore 7.0版
到目前为止,我正在使用Glass.Mapper.Sc.我已经成功映射了许多模型.我现在只是尝试了我的第一个Query映射,无法让它工作.
我有以下两种型号
[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; }
}
Run Code Online (Sandbox Code Playgroud)
和
[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; }
}
Run Code Online (Sandbox Code Playgroud)
根据教程,我应该期望TestimonialList填充一个Testimonial项目列表.但是,列表始终为空.
我已经通过sitecore的Developer Tools中的XPath构建器以及Sitecore API的以下用法检查了路径是否有效.
var query = new Query("/sitecore/content//*[@@templateName='Testimonial']");
var returnVal = query.Execute();
Run Code Online (Sandbox Code Playgroud)
其中returnVal填充了预期的项目.我也尝试过./*[@@templateName='Testimonial']
对映射属性的查询.
我已成功手动检索特定的推荐实例,以检查它是不是一些奇怪的映射问题.
抛开这个问题,Glass.Mapping.Sc和我的模型似乎都能正常工作.到目前为止,我已经按照glass.lu上的教程,我已经通过NuGet安装了Glass.Mapping.Sc.
我已经浏览了github上的源代码但看不到任何可能导致我问题的内容.有没有其他人有这个问题或成功使用玻璃查询填充参数?
更新(遵循Michael的回复):
我将以下属性添加到Testimonials类
[SitecoreQuery("./*")]
public virtual IEnumerable<AbstractModel> Children { get; set; }
Run Code Online (Sandbox Code Playgroud)
这返回了一个填充的IEnumerable的AbstractModel,它是6个Testimonial项目,它们是Testimonials项目的直接子项.
我也试过了
[SitecoreQuery("//*")]
public virtual IEnumerable<AbstractModel> Children { get; set; }
Run Code Online (Sandbox Code Playgroud)
并得到了相同的结果.我不明白那个,因为我希望得到更多的东西,而不仅仅是6个推荐书.
我删除了TestimonialList属性并添加了一个新属性Children,这个属性非常有效
[SitecoreQuery("./*[@@templatename='Testimonial']", IsRelative = true)]
public virtual IEnumerable<Testimonial> Children { get; set; }
Run Code Online (Sandbox Code Playgroud)
然后我使用resharper将属性重命名为TestimonialList,然后是ZYX,然后是Blerg.这三次都不起作用(没有填充),但是如果我重新命名为Child,一切都还可以.奇怪.
更多更新 我发现为什么当属性名为"Children"时查询似乎正在工作.它不起作用,这是我得到意想不到的结果的方式."儿童"是填充在所有子项目上的常见属性.因为我的所有子项都是推荐书,所以可以正确填充.
因此,如果我将我的属性更改为以下内容,它仍然正确填充
public virtual IEnumerable<Testimonial> Children { get; set; }
Run Code Online (Sandbox Code Playgroud)
见于Glass.Mapper.Sc.Integration.DataMappers.SitecoreChildrenMapperFixture.MapToProperty_ItemHasThreeChildren_ThreeObjectsAreCreated.
您的查询不是相对查询,因此您需要将属性更新为:
[SitecoreQuery("/sitecore/content//*[@@templatename='Testimonial']")]
public virtual IEnumerable<Testimonial> TestimonialList { get; set; }
Run Code Online (Sandbox Code Playgroud)
删除IsRelative意味着Glass将从解决方案的根目录进行查询.默认情况下,IsRelative标志为false.
IsRelative用于指示查询是否与Glass正在加载的当前项相关.例如,如果我有一个新闻登录页面,并且我想只获得具有功能标志的新闻页面的子项,我可以这样做:
[SitecoreQuery("./*[@featured='1']", IsRelative=true)]
public virtual IEnumerable<News> FeaturedNews { get; set; }
Run Code Online (Sandbox Code Playgroud)
我希望这解释了IsRelative标志的使用,如果它不让我知道,我会写一篇关于Glass网站的博客文章.
归档时间: |
|
查看次数: |
3307 次 |
最近记录: |