Sitecore Glass Mapper 总是为空

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

我在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的结果也为空。
有人有想法如何解决这个问题吗?
3个回答

2

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

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


做到了。我的语言是 nl-nl,在 sites.config 中,sites/site 节点具有 nl 语言属性。谢谢。 - Hans Leautaud
这很有趣 - 我遇到了类似的问题,实际上当我检查我的网站根目录时,语言似乎被设置为“hr” - 这是一个我从未明确设置过的值,但它是我已经删除的网站的一级子项的名称:http://screencast.com/t/aMhy7yl3这可能会让Sitecore/Glass.Mapper认为“hr”(克罗地亚语)应该是语言,从而返回空项吗? - Emanuele Ciriachi
@HansLeautaud,我在inetpub文件夹中哪里可以找到Sites.config文件? - Sidso
@Sidso,我也不知道了。这个话题已经6年了。 - Hans Leautaud

1
大多数情况下是语言问题。当您当前或给定的语言中没有版本时,映射器会返回一个空对象。
令人困惑的是,Sitecore.Context.Database.GetItem返回一个对象,即使它在当前语言中没有版本。请确保检查item.Versions是否有任何内容。

谢谢,和 Aldentev 的回答结合起来对我很有帮助。 - Hans Leautaud

0

以下是一些你可以尝试的方法(这些内容无法放在评论字段中)

1)确认 Sitecore 项目对象中相关字段包含值(因此对于你的“c”变量,使用 Sitecore.Context.Item,对于你的“d”变量,使用 Sitecore.Context.Database.GetItem("path")

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) 如果你仍然不知道它是什么,请更新你的问题并提供一些(简化的)模型代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接