Fixed KeyNotFoundException in AutoroutePart.

This fixes the issue where the autoroute part fails after a clean Orchard setup.
This commit is contained in:
Sipke Schoorstra
2015-06-27 13:38:44 +03:00
parent 23e525206b
commit 18166bd274
4 changed files with 13 additions and 9 deletions

View File

@@ -94,10 +94,10 @@ namespace Orchard.Autoroute.Drivers {
// if the content type has no defaultPattern for autoroute, then use a default one
if (!settings.DefaultPatterns.Any(x => String.Equals(x.Culture, itemCulture, StringComparison.OrdinalIgnoreCase))) {
//if we are in the default culture check the old setting
// If we are in the default culture, check the old setting.
if (String.Equals(itemCulture, _cultureManager.GetSiteCulture(), StringComparison.OrdinalIgnoreCase)) {
if (!String.IsNullOrEmpty(part.TypePartDefinition.Settings["AutorouteSettings.DefaultPatternIndex"])) {
string patternIndex = part.TypePartDefinition.Settings["AutorouteSettings.DefaultPatternIndex"];
if (!String.IsNullOrWhiteSpace(settings.DefaultPatternIndex)) {
var patternIndex = settings.DefaultPatternIndex;
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = patternIndex, Culture = itemCulture });
} else {
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = itemCulture });

View File

@@ -67,7 +67,8 @@ namespace Orchard.Autoroute.Services {
}
if (settings.UseCulturePattern) {
//if we are creating from a form post we use the form value for culture
// TODO: Refactor the below so that we don't need to know about Request.Form["Localization.SelectedCulture"].
// If we are creating from a form post we use the form value for culture.
HttpContextBase context = _httpContextAccessor.Current();
if (!String.IsNullOrEmpty(context.Request.Form["Localization.SelectedCulture"])) {
itemCulture = context.Request.Form["Localization.SelectedCulture"].ToString();
@@ -140,9 +141,8 @@ namespace Orchard.Autoroute.Services {
var settings = GetTypePartSettings(contentType).GetModel<AutorouteSettings>();
if (!settings.DefaultPatterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
ContentTypeDefinition definition = _contentDefinitionManager.GetTypeDefinition(contentType);
var patternIndex = definition.Parts.Where(x => x.PartDefinition.Name == "AutoroutePart").FirstOrDefault().Settings["AutorouteSettings.DefaultPatternIndex"];
//lazy updating from old setting
var patternIndex = settings.DefaultPatternIndex;
// Lazy updating from old setting.
if (String.Equals(culture, _cultureManager.GetSiteCulture(), StringComparison.OrdinalIgnoreCase) && !String.IsNullOrWhiteSpace(patternIndex)) {
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = patternIndex, Culture = culture });
return settings.Patterns.Where(x => x.Culture == null).ElementAt(Convert.ToInt32(settings.DefaultPatterns.Where(x => x.Culture == culture).FirstOrDefault().PatternIndex));

View File

@@ -22,6 +22,7 @@ namespace Orchard.Autoroute.Settings {
AutomaticAdjustmentOnEdit = false;
PatternDefinitions = "[]";
DefaultPatternDefinitions = "[]";
DefaultPatternIndex = null;
}
public bool PerItemConfiguration { get; set; }
@@ -31,6 +32,7 @@ namespace Orchard.Autoroute.Settings {
public bool? IsDefault { get; set; }
public List<string> SiteCultures { get; set; }
public string DefaultSiteCulture { get; set; }
public string DefaultPatternIndex { get; set; }
/// <summary>
/// A serialized Json array of <see cref="RoutePattern"/> objects
@@ -102,6 +104,7 @@ namespace Orchard.Autoroute.Settings {
builder.WithSetting("AutorouteSettings.AutomaticAdjustmentOnEdit", AutomaticAdjustmentOnEdit.ToString(CultureInfo.InvariantCulture));
builder.WithSetting("AutorouteSettings.PatternDefinitions", PatternDefinitions);
builder.WithSetting("AutorouteSettings.DefaultPatternDefinitions", DefaultPatternDefinitions);
builder.WithSetting("AutorouteSettings.DefaultPatternIndex", DefaultPatternIndex);
}
}
}

View File

@@ -70,8 +70,9 @@ namespace Orchard.Autoroute.Settings {
if (!settings.DefaultPatterns.Any(x => String.Equals(x.Culture, culture, StringComparison.OrdinalIgnoreCase))) {
//if we are in the default culture check the old setting
if (String.Equals(culture, _cultureManager.GetSiteCulture(), StringComparison.OrdinalIgnoreCase)) {
if (!String.IsNullOrEmpty(definition.Settings["AutorouteSettings.DefaultPatternIndex"])) {
string patternIndex = definition.Settings["AutorouteSettings.DefaultPatternIndex"];
var defaultPatternIndex = settings.DefaultPatternIndex;
if (!String.IsNullOrWhiteSpace(defaultPatternIndex)) {
var patternIndex = defaultPatternIndex;
settings.DefaultPatterns.Add(new DefaultPattern { Culture = settings.DefaultSiteCulture, PatternIndex = patternIndex });
} else {
settings.DefaultPatterns.Add(new DefaultPattern { PatternIndex = "0", Culture = culture });