0
我已经创建了一个映射,它通过使用ITypeConverter的自定义实现将enum转换为SelectList。AutoMapper地图枚举为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;
}
}
然后我以
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
,你可以从下面的截图看到。
在哪里我错了,与此代码?
那么,你的建议没有奏效。但实际上让我思考差异。当我传递内联类型为'ProductDeliveryMode'的'pdm'而'SelectListItem'对象的'Value'成员是string类型时。我将它转换为字符串后传递了'pdm'对象。和一切都工作!如果你纠正你的答案,我会很高兴接受它。谢谢。 – Lorenzo 2015-04-04 21:04:11
哦,太棒了,我并不确定SelectList是如何在幕后工作的,但是'pdm'的不同类型使我很怀疑。我会更新答案。 – mfanto 2015-04-04 21:07:11