我的Sitecore传奇中的两个问题:有一个类似的调用:
var item = sitecoreService.GetItem<KnownMappedObject>(knownId)
此代码适用于生产,在大多数其他情况下代码运行正常,但我导航到一个页面,此行项为空。
knownId是正确的,例如它存在于数据库中,但它返回null。我已经从本地生产中提取数据库以确保一切正确,我甚至试图确保配置正确。
此方法是否有任何其他规则会使其返回null,即使该项存在?
修改的 项目在数据库中,不知道如何查看它与之关联的语言。内容不是多语言的。
编辑2 因此,该项目将从DB返回,并且DB中的语言建议使用EN。然而,当我们单步执行代码(在sitecore中)时,它会检查Item.Version == 0的项目。只有通过 VersionDisabler 来解决这个问题。我不认为这是答案,因为它不在生产中。
另外,传入的“Language”对象具有当前页面的名称?我会认为它是“en”或类似的东西??
谢谢, 詹姆斯
答案 0 :(得分:1)
通常的原因是:
- 没有上下文语言版本(此处定义的单一语言默认为'en'?)
- 当前用户没有读取权限(尝试使用SecurityDisabler进行包装)
答案 1 :(得分:1)
想出来。
Sitecore在这种情况下将URL的第一部分作为语言,因此使用未知语言过滤项目的版本。
导致项目未被退回(因为没有语言版本!)
有一个设置:
<setting name="Languages.AlwaysStripLanguage" value="false"/>
要防止这种情况发生,必须是假的。
谢谢, 詹姆斯