2012-02-21 28 views
-1

のためにマッピングするときにBOOLする列挙型を変換したいですYesNoEnumViewModel次のenumを使用しました:は、私は、次の<strong>モデル</strong>を持つ2つのプロパティ

public enum YesNoEnumViewModel 
{ 
    [Display(Name = "Yes", ResourceType = typeof(UserResource))] 
    Yes = 1, 
    [Display(Name = "No", ResourceType = typeof(UserResource))] 
    No = 2 
} 

私のコードで私のモデルに私のviewModelをマッピングする必要があります。だから私はこれを試してみる:

[HttpPost] 
    public ActionResult AddedNew(FooViewModel viewModel) 
    { 
     if (!ModelState.IsValid) 
      return PartialView("AddedNew", viewModel); 

     var foo = Mapper.Map<FooViewModel, FooModel>(viewModel); 
     ... 
    } 

私はマップしようとするとエラーが発生しました。エラーは、列挙型のYesNoEnumViewModelからbool(私のモデルのプロパティはbool型です)への変換にあります。ここで

は私CreateMapです:

Mapper.CreateMap<FooViewModel, Foo>(); 

たぶん私はメンバーのをのisValidとは特別な何かが私のブール値に変換するために行われなければならない私のFooViewModelのをIsFollowedことCreateMapで指定する必要がありますモデル?

ありがとうございました。

+0

[マッピング(オートマッパ)が型enumをブールに変換する必要がある場合](http://stackoverflow.com/questions/9382409/when-mapping-automapper-need-to-convert-a-type -enum-to-a-bool) –

+0

この質問は、enum型の複数のプロパティの変換についてです。 – Bronzato

+0

@ブロンザートちょっと前にこれについてほとんど同じ質問をしませんでしたか? – Dismissile

答えて

2

AutoMapperはenumの背後にあるセマンティクスを知ることができないため、あなたの助けなしにこれをマップすることは期待できません。あなたのマッピングを設定するときにブールするために、カスタム列挙型を変換する方法を指定する必要があります。

Mapper 
    .CreateMap<FooViewModel, Foo>() 
    .ForMember(
     dest => dest.IsValid, 
     opt => opt.MapFrom(src => src.IsValid == YesNoEnumViewModel.Yes ? true : false) 
    ) 
    .ForMember(
     dest => dest.IsFollowed, 
     opt => opt.MapFrom(src => src.IsFollowed == YesNoEnumViewModel.Yes ? true : false) 
    ); 

し、乾燥さ:

private static bool ToBool(YesNoEnumViewModel model) 
{ 
    return model == YesNoEnumViewModel.Yes ? true : false; 
} 

、その後:

Mapper 
    .CreateMap<FooViewModel, Foo>() 
    .ForMember(
     dest => dest.IsValid, 
     opt => opt.MapFrom(src => ToBool(src.IsValid)) 
    ) 
    .ForMember(
     dest => dest.IsFollowed, 
     opt => opt.MapFrom(src => ToBool(src.IsFollowed)) 
    ); 

それとも、また使用することができますcustom value resolver

+0

ありがとう、これは私がやったよりずっときれいです。ちょうど1つの質問:私は非常によく理解しています。「dest」は目的地であり、「src」はソースですが、「opt」の意味は何ですか? – Bronzato

関連する問題