我正在使用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>
的结果为空。
有没有人知道如何解决这个问题?
答案 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)如果您仍然不知道它是什么,请使用您的模型的一些(简化)代码更新您的问题。