Loading...
Area: Optimizely CMS
ARCHIVED This content is retired and no longer maintained. See the latest version here.

Recommended reading 

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:

[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:

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
    {
        get
        {
            return typeof(LanguageSelectionFactory);
        }
        set
        {
            base.SelectionFactoryType = value;
        }
    }
}
Do you find this information helpful? Please log in to provide feedback.

Last updated: Nov 24, 2015

Recommended reading