Area: Episerver CMS
Applies to versions: 10 and higher
Other versions:

Setting up single or multiple list options

You can set up single/multiple selection from a list of predefined values by using the SelectOne and SelectMany attributes, located in the EPiServer.Shell.ObjectEditing namespace in the EPiServer.UI assembly. You can define these attributes on a property and require a reference to a class implementing the ISelectionFactory interface:

public class SamplePage : PageData
    public virtual string SingleLanguage { get; set; }
    [SelectMany(SelectionFactoryType = typeof(LanguageSelectionFactory))]
    public virtual string MultipleLanguage { get; set; }
public class LanguageSelectionFactory : ISelectionFactory
    public IEnumerable<ISelectItem> GetSelections(ExtendedMetadata metadata)
        return new ISelectItem[] { new SelectItem() { Text = "English", Value = "EN" }, new SelectItem() { Text = "Swahili", Value = "SW" }, new SelectItem() { Text = "French Polonesia", Value = "PF" }
}; } }
The result looks something like the following image:

Creating your own attributes

You should follow the DRY principle and avoid adding the reference to the selection factory in a lot of attributes by creating your own attribute, if you use them in several places. Inherit from the EPiServer attributes and override the SelectionFactoryType property as shown in the following example:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class LanguageSelectionAttribute : SelectOneAttribute
    public override Type SelectionFactoryType
            return typeof(LanguageSelectionFactory);
            base.SelectionFactoryType = value;

Last updated: Oct 26, 2016