您如何支持为 EPiServer 属性 选择多个枚举值?
How do you support selecting multiple enum values for an EPiServer property?
我有一个 属性 允许用户 select 多个枚举值,目前这可以很好地将信息保存到数据库中并供使用。但是,它似乎没有正确地将 属性 中的值读回编辑 UI.
我认为枚举存在某种类型问题,导致 SelectMany
值未按您预期的方式设置。
我有以下枚举:
public enum Skills
{
People,
IT,
Management,
Sales,
}
以及以下ISelectionFactory
:
using System;
using System.Collections.Generic;
using System.Linq;
namespace TestSite.Business.EditorDescriptors
{
using EPiServer.Shell.ObjectEditing;
public class EnumSelectionFactory<TEnum> : ISelectionFactory
{
public IEnumerable<ISelectItem> GetSelections(ExtendedMetadata metadata)
{
var values = Enum.GetValues(typeof(TEnum));
return (from object value in values select new SelectItem { Text = this.GetValueName(value), Value = value }).OrderBy(x => x.Text);
}
private string GetValueName(object value)
{
return value.ToString();
}
}
}
然后我在 Alloy 演示中添加了 属性 到 ContactPage 模型。
[SelectMany(SelectionFactoryType = typeof(EnumSelectionFactory<Skills>))]
public virtual string EmployeeLevels { get; set; }
有人知道怎么解决吗?
似乎是一个错误。请反馈给EPiServer。
设置基础值类型...
namespace TestSite.Business.EditorDescriptors
{
using EPiServer.Shell.ObjectEditing;
public class EnumSelectionFactory<TEnum, TUnderlying> : ISelectionFactory
{
public IEnumerable<ISelectItem> GetSelections(ExtendedMetadata metadata)
{
var values = Enum.GetValues(typeof(TEnum));
return (from TEnum value in values select new SelectItem { Text = this.GetValueName(value), Value = Convert.ChangeType(value, typeof(TUnderlying)) }).OrderBy(x => x.Text);
}
private string GetValueName(object value)
{
return Enum.GetName(typeof(TEnum), value);
}
}
}
...由您的模型使用字符串类型实现...
[SelectMany(SelectionFactoryType = typeof(EnumSelectionFactory<Skills,string>))]
public virtual string EmployeeLevels { get; set; }
我有一个 属性 允许用户 select 多个枚举值,目前这可以很好地将信息保存到数据库中并供使用。但是,它似乎没有正确地将 属性 中的值读回编辑 UI.
我认为枚举存在某种类型问题,导致 SelectMany
值未按您预期的方式设置。
我有以下枚举:
public enum Skills
{
People,
IT,
Management,
Sales,
}
以及以下ISelectionFactory
:
using System;
using System.Collections.Generic;
using System.Linq;
namespace TestSite.Business.EditorDescriptors
{
using EPiServer.Shell.ObjectEditing;
public class EnumSelectionFactory<TEnum> : ISelectionFactory
{
public IEnumerable<ISelectItem> GetSelections(ExtendedMetadata metadata)
{
var values = Enum.GetValues(typeof(TEnum));
return (from object value in values select new SelectItem { Text = this.GetValueName(value), Value = value }).OrderBy(x => x.Text);
}
private string GetValueName(object value)
{
return value.ToString();
}
}
}
然后我在 Alloy 演示中添加了 属性 到 ContactPage 模型。
[SelectMany(SelectionFactoryType = typeof(EnumSelectionFactory<Skills>))]
public virtual string EmployeeLevels { get; set; }
有人知道怎么解决吗?
似乎是一个错误。请反馈给EPiServer。
设置基础值类型...
namespace TestSite.Business.EditorDescriptors
{
using EPiServer.Shell.ObjectEditing;
public class EnumSelectionFactory<TEnum, TUnderlying> : ISelectionFactory
{
public IEnumerable<ISelectItem> GetSelections(ExtendedMetadata metadata)
{
var values = Enum.GetValues(typeof(TEnum));
return (from TEnum value in values select new SelectItem { Text = this.GetValueName(value), Value = Convert.ChangeType(value, typeof(TUnderlying)) }).OrderBy(x => x.Text);
}
private string GetValueName(object value)
{
return Enum.GetName(typeof(TEnum), value);
}
}
}
...由您的模型使用字符串类型实现...
[SelectMany(SelectionFactoryType = typeof(EnumSelectionFactory<Skills,string>))]
public virtual string EmployeeLevels { get; set; }