5

We are int he process of upgrading out solution and found that some of our glass models are not populating. IPage implementations are not showing up values in the IGlassBase. Here are the sample models:

IPage

public interface IPage : IBasePage
{
    [SitecoreField]
    string Title { get; set; }
    [SitecoreField]
    string Body { get; set; }
}

IGlassBase

public interface IGlassBase
{
    Guid Id { get;  set; }

    Language Language { get;  set; }

    int Version { get;  set; }

    Guid BaseTemplateIds { get; set; }

    string TemplateName { get;  set; }

    Guid TemplateId { get; set; }

    string Name { get;  set; }

    string Url { get;  set; }
}

GlassGlassBaseMap

public class GlassGlassBaseMap : SitecoreGlassMap<IGlassBase>
{

    public override void Configure()
    {
        Map(x =>
        {
            x.AutoMap();
            x.Info(y => y.BaseTemplateIds).InfoType(SitecoreInfoType.BaseTemplateIds);
        });
    }
}
  • Does your IBasePage inherit from IGlassBase? – Corey Smith Oct 7 '16 at 16:59
  • yes Corey it does inherit from IGlassBase – ASura Oct 7 '16 at 17:00
  • 1
    It looks like you are mixing fluent configuration with attribute configuration. Do you register both configuration loaders? Maybe posting your GlassMapperScCustom would help. – Ben Golden Oct 7 '16 at 17:07
8

You can't mix configuration methods in Glass Mapper. Your IPage model is using attribute configuration but your IGlassBase model is using fluent configuration. Remove the SitecoreField attributes from your IPage properties or add SitecoreField attributes to all of your IGlassBase properties and remove your fluent configuration map.

| improve this answer | |
  • 2
    Did it the other way round by adding fluent to the IPage and it started working. Thanks. – ASura Oct 7 '16 at 17:09
0

You might need to add the [SitecoreType] attribute. Something like this:

[SitecoreType(TemplateId=MyTemplateIds.Page)]
public interface IPage : IBasePage
{
    [SitecoreField]
    string Title { get; set; }
    [SitecoreField]
    string Body { get; set; }
}
| improve this answer | |
  • Thanks Ben but that is not helping. I tried to be specific with the interface and also the properties. – ASura Oct 7 '16 at 16:54
0

ASURA - I think you need to make the properties on your model virtual.

This has tripped me up a few times before.

public interface IPage : IBasePage
{
    [SitecoreField]
    public virtual string Title { get; set; }
    [SitecoreField]
    public virtual string Body { get; set; }
}
| improve this answer | |
  • Thanks but specifying that does not help this problem. For my interfaces I do not specify public nor do I virtual. – ASura Oct 7 '16 at 17:02
  • 2
    Interfaces can't have virtual properties. – Corey Smith Oct 7 '16 at 17:02
  • Ahr sorry, didn't notice it was an interface. So adding a template Id attribute isn't working either. Are you field names called exactly what you have as the property names? – Adam Seabridge Oct 7 '16 at 17:04
  • Yeah, I usually use no spaces in my fields. That checks out as well. – ASura Oct 7 '16 at 17:06
  • Ok, as otherwise I was going to say we usually decorate our properties like so and set the field name as a constant: [SitecoreField(FieldName = Fields.Title )] string Title { get; set; } If thats not the issue though that won't help. – Adam Seabridge Oct 7 '16 at 17:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.