HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunitySubmit a ticketLog In
GitHubNuGetDev CommunitySubmit a ticket

Single or multiple list options

Describes how to define SelectOne or SelectMany attributes on a property and require a reference to a class implementing the ISelectionFactory interface.

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:

[ContentType]
    public class SamplePage : PageData
    {
        [SelectOne(SelectionFactoryType=typeof(LanguageSelectionFactory))]
        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:

Create your own attributes

You should follow the DRY (Don't Repeat Yourself) 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
        {
            get
            {
                return typeof(LanguageSelectionFactory);
            }
            set
            {
                base.SelectionFactoryType = value;
            }
        }
    }