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