Glass mapper不会加载项目childeren

时间:2016-07-04 14:24:51

标签: sitecore glass-mapper tds

我们在Glass mapper 4.0中遇到问题,它不会加载项目子项。

这是我们的控制器类,它继承自GlassController:

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

这是我们的视图模型:

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

我们只获得父节点信息而不是结果中的childeren(轮播)

以下是我们得到的结果:

[结果图片] [1]

此外,使用TDS生成以下类:

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

Carousel模板继承自两个模板内容库和图像库。

2 个答案:

答案 0 :(得分:0)

似乎Carousels属性不是Carousel_Folder模板的标准,这就是为什么你的接口/类没有类似的东西:

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

在这种情况下,您需要获取Parent项并手动获取子项,即:

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

答案 1 :(得分:0)

之前我遇到过这个问题,对我来说,我已将[SitecoreChildren(IsLazy = false)]添加到我的模型中并且工作正常,在您的情况下它应该是这样的:

public class CarouselViewModel:Carousel_Folder
{

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

}