2013-06-19 23 views
1

更新:我使用Sitecore的7.0版Sitecore的玻璃映射器(V3)的Alexa排名查詢財產不被填充

我使用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與見證項目的列表填充的教程。但是,列表總是空的。

我已經通過在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上的源代碼,但看不到任何可能導致我的問題。有沒有其他人有這個問題或成功地使用玻璃查詢填充參數?

UPDATE(繼邁克爾的答覆):
添加以下屬性設置爲推薦類

[SitecoreQuery("./*")] 
public virtual IEnumerable<AbstractModel> Children { get; set; } 

這回AbstractModel的那名是直接孩子6個見證項目的填充的IEnumerable見證項目。

我也試過

[SitecoreQuery("//*")] 
public virtual IEnumerable<AbstractModel> Children { get; set; } 

,得到了相同的結果。我不明白這一點,因爲我希望獲得更多的東西,而不僅僅是6條推薦。

我刪除了TestimonialList性能並增加了一個新的屬性,兒童,和這個屬性的作品完美

[SitecoreQuery("./*[@@templatename='Testimonial']", IsRelative = true)]   
public virtual IEnumerable<Testimonial> Children { get; set; }  

然後我用ReSharper的的屬性重命名爲TestimonialList,然後ZYX,然後Blerg。所有三次它沒有工作(沒有填充),但如果我重新命名爲兒童,一切都很好。奇怪。

更多更新 我已經找到了爲什麼查詢似乎工作時,屬性被命名爲「兒童」。它不起作用,這是我得到意想不到的結果。「兒童」是在所有兒童項目上填充的共同財產。因爲我所有的孩子都是褒獎,所以這可以正確填充。

所以,如果我改變我的財產,只是下面的它仍然是正確的填充

public virtual IEnumerable<Testimonial> Children { get; set; } 

在Glass.Mapper.Sc.Integration.DataMappers.SitecoreChildrenMapperFixture.MapToProperty_ItemHasThreeChildren_ThreeObjectsAreCreated看。

回答

5

您查詢是不是相對查詢,所以你需要更新的屬性是:

[SitecoreQuery("/sitecore/content//*[@@templatename='Testimonial']")] 
public virtual IEnumerable<Testimonial> TestimonialList { get; set; } 

拆除而isRelative意味着玻璃會從溶液中的根查詢。默認情況下,IsRelative標誌爲false。

IsRelative用於指示查詢是相對於Glass正在加載的當前項目。例如,如果我有一個消息着陸頁,我想只得到其中有一個功能標誌,我可能做到這一點的新聞頁面的孩子:

[SitecoreQuery("./*[@featured='1']", IsRelative=true)] 
public virtual IEnumerable<News> FeaturedNews { get; set; } 

我希望這解釋瞭如何使用而isRelative標誌,如果不會讓我知道,我會爲Glass網站寫一篇博客文章。

+0

對不起,我感到困惑。我首先嚐試了一個相對路徑「./*[@@templateName='Testimonial']」,正如我在帖子中的其他地方所說的那樣。我試圖用IsRelative設置爲true。完整的路徑被嘗試與IsRelative虛假和真實,都沒有工作。相對查詢也不起作用。我也嘗試過使用一個非常通用的類型和一個開放的Xpath查詢(例如「// *」),並返回我的基本模板類型,但也不起作用。 –

0

我發現我的問題(花了幾個小時搜索玻璃映射器源 - 至少我學到了一些關於玻璃映射器的東西:))。我重新命名了我的程序集,並且沒有更改傳入{{SitecoreAttributeConfigurationLoader}}的名稱。

一旦我改變了這個名字,我仍然無法使它工作,所以我從我的bin文件夾中刪除了舊的dll,重新啓動了電腦,並在桌面上跳了幾下高呼工作!工作!工作!一遍又一遍(確定最後一點是由)。

之後,一切正常。

+0

所以你不再有問題? –

相關問題