diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/EnumerationFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/EnumerationFieldDriver.cs index fb9e64649ae..d1b93fe6e31 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/EnumerationFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/EnumerationFieldDriver.cs @@ -4,46 +4,41 @@ using Orchard.Fields.Fields; using Orchard.Fields.Settings; using Orchard.Localization; -using System; -using System.Collections.Generic; -using System.Linq; namespace Orchard.Fields.Drivers { public class EnumerationFieldDriver : ContentFieldDriver { public IOrchardServices Services { get; set; } + private const string TemplateName = "Fields/Enumeration.Edit"; public EnumerationFieldDriver(IOrchardServices services) { Services = services; + T = NullLocalizer.Instance; } public Localizer T { get; set; } - private static string GetPrefix(ContentField field, ContentPart part) { - return part.PartDefinition.Name + "." + field.Name; - } + private static string GetPrefix(ContentField field, ContentPart part) => + part.PartDefinition.Name + "." + field.Name; - private static string GetDifferentiator(EnumerationField field, ContentPart part) { - return field.Name; - } + private static string GetDifferentiator(EnumerationField field) => field.Name; protected override DriverResult Display(ContentPart part, EnumerationField field, string displayType, dynamic shapeHelper) { - return ContentShape("Fields_Enumeration", GetDifferentiator(field, part), - () => shapeHelper.Fields_Enumeration()); + return ContentShape("Fields_Enumeration", GetDifferentiator(field), () => shapeHelper.Fields_Enumeration()); } protected override DriverResult Editor(ContentPart part, EnumerationField field, dynamic shapeHelper) { - return ContentShape("Fields_Enumeration_Edit", GetDifferentiator(field, part), - () => { - if (part.IsNew() && String.IsNullOrEmpty(field.Value)) { - var settings = field.PartFieldDefinition.Settings.GetModel(); - if (!String.IsNullOrWhiteSpace(settings.DefaultValue)) { - field.Value = settings.DefaultValue; - } + return ContentShape("Fields_Enumeration_Edit", GetDifferentiator(field), () => { + if (part.IsNew() && string.IsNullOrEmpty(field.Value)) { + var settings = field.PartFieldDefinition.Settings.GetModel(); + if (!string.IsNullOrWhiteSpace(settings.DefaultValue)) { + field.SelectedValues = new string[] { settings.DefaultValue }; } - return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: field, Prefix: GetPrefix(field, part)); - }); + } + + return shapeHelper.EditorTemplate(TemplateName: TemplateName, Model: field, Prefix: GetPrefix(field, part)); + }); } protected override DriverResult Editor(ContentPart part, EnumerationField field, IUpdateModel updater, dynamic shapeHelper) { diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Fields/EnumerationField.cs b/src/Orchard.Web/Modules/Orchard.Fields/Fields/EnumerationField.cs index a81d6829e0a..ee572b66bd4 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Fields/EnumerationField.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Fields/EnumerationField.cs @@ -7,28 +7,16 @@ public class EnumerationField : ContentField { private const char Separator = ';'; public string Value { - get { return Storage.Get(); } - set { Storage.Set(value ?? String.Empty); } + get => Storage.Get()?.Trim(Separator) ?? ""; + set => Storage.Set(string.IsNullOrWhiteSpace(value) + ? string.Empty + // It is now the responsibility of this field to (re-)add the separators. + : Separator + value.Trim(Separator) + Separator); } public string[] SelectedValues { - get { - var value = Value; - if(string.IsNullOrWhiteSpace(value)) { - return new string[0]; - } - - return value.Split(new [] { Separator }, StringSplitOptions.RemoveEmptyEntries); - } - - set { - if (value == null || value.Length == 0) { - Value = String.Empty; - } - else { - Value = Separator + string.Join(Separator.ToString(), value) + Separator; - } - } + get => Value?.Split(new[] { Separator }, StringSplitOptions.RemoveEmptyEntries) ?? new string[0]; + set => Value = value?.Length > 0 ? string.Join(Separator.ToString(), value) : ""; } } } diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Enumeration.Edit.cshtml b/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Enumeration.Edit.cshtml index 0d7b16dd8c7..0f3d1003600 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Enumeration.Edit.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Fields/Views/EditorTemplates/Fields/Enumeration.Edit.cshtml @@ -1,22 +1,27 @@ @model Orchard.Fields.Fields.EnumerationField + @using Orchard.Fields.Settings; + @{ var settings = Model.PartFieldDefinition.Settings.GetModel(); string[] options = (!String.IsNullOrWhiteSpace(settings.Options)) ? settings.Options.Split(new string[] { System.Environment.NewLine }, StringSplitOptions.None) : new string[] { T("Select an option").ToString() }; } +
- + @switch (settings.ListMode) { case ListMode.Dropdown: - @Html.DropDownListFor(m => m.Value, new SelectList(options, Model.Value), settings.Required ? new { required = "required" } : null) + @Html.DropDownListFor(m => m.Value, new SelectList(options, Model.SelectedValues.FirstOrDefault()), settings.Required ? new { required = "required" } : null) break; case ListMode.Radiobutton: foreach (var option in options) { if (string.IsNullOrWhiteSpace(option)) { - } + + } else { - } + + } } break;