Sitecore Glass Mapper始终为null

时间:2014-04-24 09:25:28

标签: sitecore code-generation glass-mapper tds sitecore7.2

我正在使用Sitecore Glass Mapper来设置我正在设置的新项目。 我们正在使用Sitecore 7.2,最新版本的Team Development for Sitecore(TDS)代码生成和最新版本的玻璃。

我正在尝试执行的代码:

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

b不为空。 c为空。

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

d为空。

我在GlassMapperScCustom中添加了我的程序集:

public static IConfigurationLoader[] GlassLoaders(){            

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

    return new IConfigurationLoader[] { attributes };
}

当我查看b.GlassContext.TypeConfigurations时,我的所有模型都在那里。

我认为它可能是一个语言问题,因为该网站是荷兰语,也许错误的语言可能会被错误地解决。事实并非如此。

我禁用了WebActivator并在我的Global.asax Application_Start方法中添加了GlassMapperSc.Start()。

我们也使用Autofac作为DI框架。但如果没有它,它仍然无法正常工作,如上所述。此外,当我创建自己的自定义模型而没有生成TDS代码时,GetCurrentItem<T>的结果为空。

有没有人知道如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您是否检查过您的Sites.config以及此网站的默认语言? Sitecore语言文件夹中定义的语言与您的配置之间可能存在差异。

我的一个项目出现了类似的问题,我将Sitecore.Context.Language更改为&#34; nl&#34;而不是&#34; nl-NL&#34;。 glass mapper将返回null,但在这种情况下,Sitecore.Context.Database.GetItem将返回一个对象。

答案 1 :(得分:1)

大多数时候,这是一个语言问题。当您没有当前或给定语言的版本时,映射器返回一个空对象。

可能令人困惑的是,Sitecore.Context.Database.GetItem返回一个对象,即使它没有当前语言的版本。请务必检查该项目。版本有任何。

答案 2 :(得分:0)

您可以尝试的一些事情(这不适合评论字段)

1)确认Sitecore Item对象中的相关字段包含值(对于您的&#34; c&#34; var Sitecore.Context.Item为{&#34; d&#34} Sitecore.Context.Database.GetItem("path") ; var)

2)尝试将GetItem / GetCurrentItem调用封装在VersionCountDisabler中,如下所示:

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)尝试使用SecurityDisabler封装相同的调用。只是为了确认它不是安全问题。

4)如果您仍然不知道它是什么,请使用您的模型的一些(简化)代码更新您的问题。