sitecore保留在SC.Context.Database.Languages中找到的语言?

时间:2015-11-27 07:22:59

标签: sitecore sitecore6 sitecore7 sitecore8

我有以下代码:

public void Process(SC.Pipelines.HttpRequest.HttpRequestArgs args)
{
   if (HttpContext.Current == null || SC.Context.Database == null)
   {
      return;
   }
string languageCode = DomainHandler.Instance.GetDomainLanguage(HttpContext.Current.Request.Url.Host);
SC.Globalization.Language language = SC.Context.Database.Languages.First(x => x.Name == languageCode);

一旦运行就会导致错误消息:

Sequence contains no matching element

我猜有人删除了这些语言,现在SC.Context.Database.Languages集合为空,因此出错。

我无法登录sitecore cms,我很好奇如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

你应该通过说

来获得当前语言
var languages = Context.Database.GetLanguages();

然后您可以应用Where子句。 Db.Languages和Db.GetLanguages()

之间可能存在差异

答案 1 :(得分:0)

我还没有解决问题,但是通过使用以下代码,用户可以通过分配默认语言来至少登录cms,以防止它们都不可用:

string languageCode = DomainHandler.Instance.GetDomainLanguage(HttpContext.Current.Request.Url.Host);
var languages = SC.Context.Database.GetLanguages().Where(l => l.Name == languageCode);
//make dutch default language
SC.Globalization.Language language = Sitecore.Globalization.Language.Parse("nl-NL");
if (languages.Count() > 0)
{
    language = languages.First();
}

我仍然疑惑为什么语言集合是空的?

答案 2 :(得分:0)

sitecore语言存储在/ sitecore / system / languages节点中。 此外,使用FirstOrDefault而不是First总是好的,因为如果找不到匹配项,First将返回异常。

答案 3 :(得分:0)

可能会迟到..但你可以试试吗

Sitecore.Collections.LanguageCollection languages = LanguageManager.GetLanguages(Sitecore.Context.ContentDatabase);
string languageCode = "xxx"; //get some logic to get your language code. 
Sitecore.Globalization.Language language = languages.FirstOrDefault(x => x.Name == languageCode);