6

我正在将 Sitecore Glass Mapper 用于我正在设置的新项目。我们正在使用 Sitecore 7.2、最新版本的 Team Development for Sitecore (TDS) 代码生成和最新版本的 glass。

我试图执行的代码:

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>为空。

有谁知道我该如何解决这个问题?

4

3 回答 3

2

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

我的一个项目遇到了类似的问题,我将 Sitecore.Context.Language 更改为“nl”而不是“nl-NL”。玻璃映射器将返回 null,但 Sitecore.Context.Database.GetItem 在这种情况下将返回一个对象。

于 2014-04-24T10:53:07.597 回答
1

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

令人困惑的是 Sitecore.Context.Database.GetItem 返回一个对象,即使它没有当前语言的版本。请务必检查 item.Versions 是否有。

于 2014-04-24T09:44:05.987 回答
0

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

1) 确认 Sitecore Item 对象中的相关字段包含值(因此Sitecore.Context.Item对于您的“c”var 和Sitecore.Context.Database.GetItem("path")“d”var)

2) 尝试将 GetItem/GetCurrentItem 调用封装在 a 中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)如果您仍然不知道它是什么,请使用您的模型的一些(简化)代码更新您的问题。

于 2014-04-24T10:12:42.617 回答