7

私の ASP.NET MVC 2 (RC) プロジェクトでは、AutoMapper を使用して、Linq から Sql クラス (メディア) とビュー モデル (MediaVM) の間をマッピングしています。ビュー モデルには、ビューのドロップダウン用の SelectList プロパティがあります。データベースから SelectList プロパティ項目を設定するためのカスタム値リゾルバーがありますが、(ConstructedBy メソッドを使用して)ソース モデルからリゾルバーにいくつかの値を渡す方法があるかどうか疑問に思っています) a) 選択した項目を定義し、b ) db からアイテムをフィルタリングします。ソース オブジェクトはカスタム リゾルバに渡されますが、リゾルバはさまざまなタイプのソース オブジェクトを持ついくつかの異なるビュー モデルで使用されるため、マッピング構成で値を取得する場所を定義する必要があります。ここに私のビューモデルがあります:

public class MediaVM
{
    public bool Active { get; set; }
    public string Name { get; set; }

    [UIHint("DropDownList")]
    [DisplayName("Users")]
    public SelectList slUsers { get; private set; }
}        

オートマッパー マッピング構成:

    Mapper.CreateMap<Media, MediaVM>()
        .ForMember(dest => dest.slUsers, opt => opt.ResolveUsing<UsersSelectListResolver>());

.ForMember マッピング句で次のようなことができると便利です。

.ConstructedBy(src => new UsersSelectListResolver(src.UserID, src.FilterVal))

これを達成する方法はありますか?

4

2 に答える 2

8

私はそのアイデアを機能リクエストとして気に入っています。MapFromを使用すると、今すぐそのようなことができます。

ForMember(dest => dest.slUsers, opt => opt.MapFrom(src => new UsersSelectListResolver(src).Resolve(src));
于 2010-01-17T19:54:45.643 に答える
2

あなたの投稿が同じことをしようとしているのを見つけました。私は単純なアプローチを決定し、AutoMaper を介して選択リストに直接マップする試みをスキップしました。ViewModel に配列を返し、選択リストでそのオブジェクトを参照するだけです。配列はマップされますが、選択リスト オブジェクトはマップされません。シンプルで効果的。そして、私見はそれぞれが意図したタスクを実行しています-マッパーマップ、ViewModelはレイアウトを行います

View Model code:
        [DisplayName("Criterion Type")]
        public virtual CriterionType[] CriterionTypes { get; set; }

        [DisplayName("Criterion Type")]
        public SelectList CriterionTypeList
        {
            get
            {
                return new SelectList(CriterionTypes, "Id", "Key");
            }
        }  

私のマッパー:

 Mapper.CreateMap<Criterion, CriterionForm>()
            .ForMember(dest => dest.CriterionTypeList, opt => opt.Ignore());     
于 2010-01-16T20:49:51.527 に答える