2016-07-04 17 views
2

Wir stehen vor dem Problem in Glass Mapper 4.0, wo es Element Kinder nicht geladen wird.Glas Mapper lädt Artikel childeren

Hier ist unsere Controller-Klasse, ist es von GlassController vererben:

public class CarouselController : GlassController 
{ 
    public ActionResult GetCarousel() 
    { 
     Model = this.GetDataSourceItem<CarouselViewModel>(); 
     return View(Model); 
    } 
} 

Und hier ist unsere Ansicht Modell:

public class CarouselViewModel:Carousel_Folder 
{  
    [SitecoreChildren] 
    public virtual IEnumerable<Carousel> Carousels { get; set; } 
} 

wir nur die übergeordneten Knoten Informationen nicht die childeren (Karussells) erhalten im Ergebnis ist

Hier ist das Ergebnis, das wir erhalten:

[Ergebnis Bild] [1]

Außerdem wurden folgende Klassen mit TDS erzeugt:

[SitecoreType(TemplateId = ICarousel_FolderConstants.TemplateIdString)] //, Cachable = true 
public partial interface ICarousel_Folder : IGlassBase 
{} 

Karussell-Vorlage wird von zwei Vorlagen Inhalt Basis und Bildbasis vererben.

+1

Sind Sie sicher, dass die Ergebnisse leer sind? Haben Sie versucht, die Ergebnisansicht zu erweitern? – Gatogordo

+0

Verstehen Sie den Unterschied zwischen IEnumerable <> und List <>? –

Antwort

0

ich vor dieses Problem hatte, für mich i [SitecoreChildren(IsLazy = false)] mein Modell hinzugefügt und es funktioniert gut, in Ihrem Fall sollte es so sein:

public class CarouselViewModel:Carousel_Folder 
{ 

    [SitecoreChildren(IsLazy = false)] 
    public virtual IEnumerable<Carousel> Carousels { get; set; }  

} 
+0

Vielen Dank für Ihren Vorschlag, es hat funktioniert. :) –

+0

Ich habe eine Abfrage, google ich nur diese "IsLazy" und kam zu wissen, dass standardmäßig Wert ist falsch. Also, warum müssen wir es hier explizit schreiben? Es wird großartig, wenn du mir helfen kannst, das zu verstehen. –

0

Es scheint, dass Carousels Eigenschaft nicht par der Carousel_Folder Vorlage ist, das ist, warum Ihre Schnittstelle/Klasse nicht so etwas wie haben:

[SitecoreType(TemplateId=ICarousel_FolderConstants.TemplateIdString)] 
public partial class Carousel_Folder : GlassBase, ICarousel_Folder 
{ 
    [SitecoreField(ICarouselConstants.CarouselsFieldName)] 
    public virtual IEnumerable<Carousel> Carousels {get; set;} 
} 

In diesem Fall müssen Sie das übergeordnete Element erhalten und bekommen die Kinder von Hand, das heißt:

var children = parentItem.Children.Select(x => x.GlassCast<Carousel>()) 
+0

Das 'CarouselViewModel' erbt von' Carousel_Folder' und erweitert es um die '[SitecoreChildren]' - Definition, so dass das Modell korrekt ist, um Kinder des Elements zu erhalten. Der Code, den Sie hinzugefügt haben, wird nicht benötigt (oder was ich empfehlen würde): http://www.glas.lu/Blog/GettingChildItems – jammykam