[英]AutoMapper map Enum to SelectList - Selected value not working
我创建了一个映射,该映射通过使用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>()
));
除了SelectListItem
的Selected
值不保持其值的事实以外,其他所有内容似乎都工作得很好。 我已经能够进入代码,并且SelectListItem
sli1
已正确创建,且所选值等于true
。
但是,当我在映射后检查该值时,该值始终为false
如以下屏幕截图所示。
该代码在哪里出错?
问题是当您创建选择列表时:
SelectList sl = new SelectList( items, "Value", "Text", pdm);
您正在将所选项目作为ProductDeliveryMode
类型的pdm
传递,并将其与string
类型的Value
属性进行比较。
从下面的评论中,解决方案是将pdm
作为字符串传递。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.