【问题标题】:Sitecore Glass.Mapper returns nullSitecore Glass.Mapper 返回 null
【发布时间】:2015-07-17 16:46:10
【问题描述】:

突然间,一段使用 Glass.Mapper 一直运行良好的代码无缘无故地不再运行了。我正在尝试检索我网站的 根元素 的 Glass 包装器,它是模板 MenuPage:

var root = Sitecore.Context.Database.GetItem("/sitecore/content/ecosystem");

此元素不为空。但是当我尝试检索它的 Glass.Mapper 版本时:

var TreeHead = new SitecoreContext().GetItem<MenuPage>(root.ID.Guid.ToString());

这个项目,以前从不为空,现在一直如此。

我确实读过this question on the same subject,实际上,当我检查我网站的根目录时,语言似乎设置为“hr”——我从未明确设置过这个值,但它是我之前添加的我的网站,然后因为它导致问题而被删除。

http://screencast.com/t/aMhy7yl3

这是否会使 Sitecore/Glass.Mapper 认为“hr”(克罗地亚语)应该是语言,从而返回一个 null 项?在这种情况下,如何将语言改回英文?

【问题讨论】:

  • 您是否尝试过清除 cookie/浏览器缓存,或尝试使用隐身模式?
  • 奇怪 - 它适用于 IE 而不是 Chrome。也许系统以某种方式从 Chrome cookie 中获取语言?
  • 这是一个语言饼干,天知道从哪里开始。该死。如果您将其添加为答案,我将很乐意接受。现在,我如何配置 Sitecore 以忽略它?

标签: sitecore sitecore7.2 glass-mapper


【解决方案1】:

问题是由于您之前访问“/hr”时出现的语言 cookie 不正确,Sitecore 将其解释为对克罗地亚语的请求。再次访问该页面,即使它不存在并检查 cookie,您会看到它设置为 website#lang=hr(在 Chrome 中的资源选项卡中)。即使您的系统上没有设置语言,httpRequestBegin 管道中的LanguageResolver 处理器仍会将其设置为上下文语言。由于该项目不存在语言版本,Glass 将返回 null:https://stackoverflow.com/a/19712345/661447

最简单的解决方案是清除 cookie 以暂时解决问题。

如果您想完全避免这种情况,长期解决方案需要覆盖某些 Sitecore 处理器,不允许语言解析器为无效语言设置 cookie,然后为无效语言抛出 404。这里有更多信息,但我认为它应该比讨论的更进一步:https://sdn.sitecore.net/forum//ShowPost.aspx?PostID=61854

【讨论】:

  • 哈哈,很高兴能帮上忙,这只是本周出现的一件我以前遇到过的随机事情:)
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多