簡體   English   中英

AutoMapper將Enum映射到SelectList-選擇的值不起作用

[英]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>()
));

除了SelectListItemSelected值不保持其值的事實以外,其他所有內容似乎都工作得很好。 我已經能夠進入代碼,並且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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM