突然间,并且没有明显的理由使用Glass.Mapper的一段代码总是正常工作不再这样做。我正在尝试检索我的网站的根元素的Glass包装器,它是模板MenuPage:
var root = Sitecore.Context.Database.GetItem("/sitecore/content/ecosystem");
此元素不为null。但是当我尝试检索它的Glass.Mapper版本时:
var TreeHead = new SitecoreContext().GetItem<MenuPage>(root.ID.Guid.ToString());
这个项目,以前从来都不是null,现在它一直如此。
我确实阅读了this question on the same subject,当我检查我的网站的根目录时,语言似乎被设置为“hr” - 这个值我从未明确地设置过,但它是一级的名字我之前添加的网站的子项,然后删除,因为它导致了问题。
http://screencast.com/t/aMhy7yl3
这有不可能使得Sitecore / Glass.Mapper认为“hr”(克罗地亚语)应该是语言,从而返回一个空项?在这种情况下,如何将语言更改回英语?
答案 0 :(得分:2)
问题是由于您之前访问&#34; / hr&#34;的语言Cookie不正确,Sitecore将其解释为对克罗地亚语的请求。再次访问该页面,即使它不存在并检查Cookie,您会看到它设置为website#lang=hr
(在资源标签中的Chrome中)。即使您的系统上没有设置语言,LanguageResolver
管道中的httpRequestBegin
处理器仍会将其设置为上下文语言。由于该项目不存在语言版本,因此Glass将返回null:https://stackoverflow.com/a/19712345/661447
最简单的解决方案是清除cookie以解决问题。
如果要完全避免这种情况,长期解决方案需要覆盖一些Sitecore处理器,不允许语言解析器为无效语言设置cookie,然后为无效语言抛出404。这里有更多信息,但我认为它应该比讨论过的更进一步:https://sdn.sitecore.net/forum//ShowPost.aspx?PostID=61854