我有以下代码:
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,我很好奇如何解决这个问题?
答案 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);