为什么我的Enumerable不会被Glass.Mapper填充?

时间:2015-10-14 16:47:58

标签: c# sitecore glass-mapper

我完全不知道为什么这不起作用。我有一个类,其中包含其他类的列表作为它的属性:

public class Widget
{
     ....
     public virtual IEnumerable<WidgetButton> Buttons { get; set; }
}

[SitecoreType(TemplateId = "{B615973D-59F6-437E-9827-BA3A40068C69}", AutoMap =true)]
public class WidgetButton : BasePage
{
     [SitecoreField]
     public virtual string Title { get; set; }
}

我的sitecore项目有一个TreeListEx,其中包含一个项目:

enter image description here

我正在读这个项目:

Widget widgetTest = SitecoreContext.GetItem<Widget>(new Guid("{4FF5B96F-9606-4581-95F7-B6A7BAA4C28F}"));

我的WidgetwidgetTest)包含sitecore以外的所有数据,但按钮!? Buttons属性只是一个空列表。我错过了什么我已经尝试了几种配置,发布等。根据Glass.Mapper tutorials这应该有效

玻璃配置

Glass.Mapper.Sc.CastleWindsor.config

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
    <sitecore>
        <pipelines>
            <initialize>
                <processor type="RR.Web.Website.App_Start.GlassMapperSc, RR.Web.Website" />
            </initialize>
        </pipelines>
    </sitecore>
</configuration>

Glass.Mapper.Sc.Mvc.Config

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
      <settings></settings>
    <pipelines>



      <mvc.getModel>
        <processor type="Glass.Mapper.Sc.Pipelines.Response.GetModel, Glass.Mapper.Sc.Mvc"/>
      </mvc.getModel>

    </pipelines>
  </sitecore>
</configuration>

直接访问sitecore我可以获得我的项目:

Sitecore.Data.Database context = Sitecore.Context.Database;
var item  = context.GetItem(new ID("{4FF5B96F-9606-4581-95F7-B6A7BAA4C28F}"));

item包含一个名为Buttons的字段,此字段的value是树状列表({3C18BF9F-9906-4807-83B9-73CA08E61C39})中项目的GUID。

如果我直接查询,我可以看到按钮:

var buttonItem = context.GetItem(new ID("{3C18BF9F-9906-4807-83B9-73CA08E61C39}"));

所以一切看起来都很好!为什么没有玻璃映射器映射这个?

1 个答案:

答案 0 :(得分:1)

我有一个解决方案,不要问我为什么会这样,因为我通过反复试验找到了它。基本上这样做似乎使它工作:

[SitecoreType(AutoMap =true)]
public class Widget
{
     ....
     [SitecoreField(FieldType =SitecoreFieldType.TreelistEx)]
     public virtual IEnumerable<WidgetButton> Buttons { get; set; }
}

具体来说,我认为指定FieldType