Sitecore Glass Mapper always null

时光总嘲笑我的痴心妄想 提交于 2019-12-29 08:41:40

问题


I am using Sitecore Glass Mapper for a new project I'm setting up. We are using Sitecore 7.2, latest version of Team Development for Sitecore (TDS) code generation and the latest version of glass.

The code I am trying to execute:

var b = new SitecoreContext();
var c = b.GetCurrentItem<T01_Homepage>();

b is not null. c is null.

var d = b.GetItem<T01_Homepage>("path")

d is null.

I added my assembly in GlassMapperScCustom:

public static IConfigurationLoader[] GlassLoaders(){            

    var attributes = new AttributeConfigurationLoader(new[] { "Company.Framework.Websites.Corporate", "Company.Framework.Core", "Company.Framework.Common" });

    return new IConfigurationLoader[] { attributes };
}

When I look into b.GlassContext.TypeConfigurations all my models are there.

I figured it could be a language issue because the site is in dutch and maybe the wrong language would be resolved incorrectly. This was also not the case.

I disabled WebActivator and added the GlassMapperSc.Start() in my Global.asax Application_Start method.

We are also using Autofac as DI framework. But without it, it still isn't working as you can see above. Also when I create my own custom models without TDS code generation the result of GetCurrentItem<T> is null.

Does anyone have an idea how I can fix this?


回答1:


Did you check your Sites.config and the default language for this website? There could be a difference between the language which is defined in your Sitecore languages folder and your configuration.

I had a similar problem with one of my projects where I changed the Sitecore.Context.Language to "nl" instead of "nl-NL". The glass mapper will return null, but Sitecore.Context.Database.GetItem will return an object in this case.




回答2:


Most of the times it is a language issue. The mapper returns a null object when you do not have versions in the current or given language.

What can be confusing is that Sitecore.Context.Database.GetItem returns an object, even if it does not have a version in the current language. Be sure to check that item.Versions has any.




回答3:


Some things you may try (this didn't fit in the comments field)

1) Confirm that the related fields in the Sitecore Item object contain values (so Sitecore.Context.Item for your "c" var and Sitecore.Context.Database.GetItem("path") for your "d" var)

2) Try to encapsulate the GetItem/GetCurrentItem call in a VersionCountDisabler, like this:

T01_Homepage model = null;

using (new VersionCountDisabler())
{
  var context = new SitecoreContext();
  model = context.GetItem<T01_Homepage>("path");
}

// Do you have data in model now?

3) Try to encapsulate the same call with a SecurityDisabler. Just to confirm it's not a security issue.

4) If you still don't know what it is, please update your question with some (simplified) code for your model.



来源:https://stackoverflow.com/questions/23264897/sitecore-glass-mapper-always-null

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!