玻璃映射器不加载项目儿童
Glass mapper does not load item childeren
我们在 Glass mapper 4.0 中遇到问题,它不加载项目子项。
这是我们的控制器 class ,它继承自 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; }
}
结果中我们只得到父节点信息而不是子节点(轮播)
这是我们得到的结果:
[结果图片][1]
此外,以下 classes 是使用 TDS 生成的:
[SitecoreType(TemplateId = ICarousel_FolderConstants.TemplateIdString )] //, Cachable = true
public partial interface ICarousel_Folder : IGlassBase
{}
Carousel模板继承自两个模板content base和image base。
Carousels 属性 似乎不是 Carousel_Folder 模板的一部分,这就是为什么您的 Interface/Class 没有类似的东西:
[SitecoreType(TemplateId=ICarousel_FolderConstants.TemplateIdString)]
public partial class Carousel_Folder : GlassBase, ICarousel_Folder
{
[SitecoreField(ICarouselConstants.CarouselsFieldName)]
public virtual IEnumerable<Carousel> Carousels {get; set;}
}
在这种情况下,您需要获取父项并手动获取子项,即:
var children = parentItem.Children.Select(x => x.GlassCast<Carousel>())
我以前遇到过这个问题,对我来说,我将 [SitecoreChildren(IsLazy = false)]
添加到我的模型中并且它工作正常,在你的情况下它应该是这样的:
public class CarouselViewModel:Carousel_Folder
{
[SitecoreChildren(IsLazy = false)]
public virtual IEnumerable<Carousel> Carousels { get; set; }
}
我们在 Glass mapper 4.0 中遇到问题,它不加载项目子项。
这是我们的控制器 class ,它继承自 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; }
}
结果中我们只得到父节点信息而不是子节点(轮播)
这是我们得到的结果:
[结果图片][1]
此外,以下 classes 是使用 TDS 生成的:
[SitecoreType(TemplateId = ICarousel_FolderConstants.TemplateIdString )] //, Cachable = true
public partial interface ICarousel_Folder : IGlassBase
{}
Carousel模板继承自两个模板content base和image base。
Carousels 属性 似乎不是 Carousel_Folder 模板的一部分,这就是为什么您的 Interface/Class 没有类似的东西:
[SitecoreType(TemplateId=ICarousel_FolderConstants.TemplateIdString)]
public partial class Carousel_Folder : GlassBase, ICarousel_Folder
{
[SitecoreField(ICarouselConstants.CarouselsFieldName)]
public virtual IEnumerable<Carousel> Carousels {get; set;}
}
在这种情况下,您需要获取父项并手动获取子项,即:
var children = parentItem.Children.Select(x => x.GlassCast<Carousel>())
我以前遇到过这个问题,对我来说,我将 [SitecoreChildren(IsLazy = false)]
添加到我的模型中并且它工作正常,在你的情况下它应该是这样的:
public class CarouselViewModel:Carousel_Folder
{
[SitecoreChildren(IsLazy = false)]
public virtual IEnumerable<Carousel> Carousels { get; set; }
}