2

我有一个允许用户选择多个枚举值的属性,目前这可以很好地将信息保存到数据库中并使用它。但是,它似乎没有正确地将属性中的值读回编辑 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 Demo 中添加到 ContactPage 模型的属性。

    [SelectMany(SelectionFactoryType = typeof(EnumSelectionFactory<Skills>))]
    public virtual string EmployeeLevels { get; set; }

有谁知道如何解决这个问题?

4

2 回答 2

2

似乎是一个错误。请向 EPiServer 报告。

于 2015-08-24T16:36:44.280 回答
1

设置基础值类型...

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; } 
于 2015-08-25T11:04:39.710 回答