AutoMapper map枚举到SelectList - 选择的值不起作用

时间:2015-04-04 16:25:59

标签: c# automapper enumeration automapper-3

我创建了一个地图,通过使用ITypeConverter的自定义实现将枚举转换为SelectList。

public class DeliveryModeToSelectListTypeConverter : ITypeConverter<ProductDeliveryMode, SelectList>
{
    public SelectList Convert( ResolutionContext context ) {
        ProductDeliveryMode pdm = (ProductDeliveryMode)context.SourceValue;
        List<SelectListItem> items = new List<SelectListItem>();
        SelectListItem sli1 = new SelectListItem() {
            Text = StringEnum.GetStringValue( ProductDeliveryMode.DeliveryModeActivationByPin ),
            Value = ( (int)ProductDeliveryMode.DeliveryModeActivationByPin ).ToString(),
            Selected = (pdm == ProductDeliveryMode.DeliveryModeActivationByPin)
        };
        items.Add( sli1 );

        [...other enum members here...]

        SelectList sl = new SelectList( items, "Value", "Text", pdm );
        return sl;
    }
}

然后我使用

创建了一个Map
Mapper.CreateMap<ProductDeliveryMode, SelectList>()
      .ConvertUsing( new DeliveryModeToSelectListTypeConverter() );
Mapper.CreateMap<Product, ProductViewModel>()
    .ForMember( p => p.DeliveryModeOptions, opt => opt.MapFrom( x => x.DeliveryMode ) )
    [...other members here...]
    .Include<ExperienceProduct, ExperienceProductViewModel>();
Mapper.CreateMap<ExperienceProduct, ExperienceProductViewModel>()
    .IncludeBase<Product, ProductViewModel>()
));

除了Selected的{​​{1}}值不保持其值之外,所有内容似乎都非常好用。我已经能够进入代码并且SelectListItem SelectListItem正确创建了所选值等于sli1

Value when mapping

但是,当我在映射后检查该值时,值始终为true,如以下屏幕截图所示。

Value after mapping

这段代码我哪里错了?

1 个答案:

答案 0 :(得分:1)

问题在于您创建选择列表时:

SelectList sl = new SelectList( items, "Value", "Text", pdm);

您将所选项目作为pdm类型的ProductDeliveryMode传递,该项目与Value类型的string属性进行比较。

从下面的评论中,解决方案是将pdm作为字符串传递。