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 or multiple selections 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 attributes

You should follow the DRY (Don't Repeat Yourself) principle and avoid adding references to the selection factory in many attributes by creating an 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;
    }
  }
}