代码之家  ›  专栏  ›  技术社区  ›  Emanuele Ciriachi

Sitecore玻璃。映射器返回null

  •  0
  • Emanuele Ciriachi  · 技术社区  · 11 年前

    突然,毫无明显的原因,一段代码使用了Glass。一直工作良好的映射器不再如此。我正试图取回 根元素 我的网站,模板为MenuPage:

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

    此元素不为空。但当我试图取回玻璃杯时。映射器版本:

    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”(克罗地亚语)应该是语言,因此返回空项?在这种情况下,如何将语言改回英语?

    1 回复  |  直到 11 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    该问题是由于您上次访问“/hr”时的语言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

    推荐文章