2012-02-22 14 views
2

今日はMVCの周りに頭を浮かべて、モデルを直接ビューに渡さないようにすることをお勧めします。代わりに、ViewModelを使用します。IEnumerable <Object>をViewModelに渡す - オブジェクトがViewModelである必要がありますか?

私はAutoMapperを研究し、それを使って自分のViewModelsをそれぞれのモデルにマッピングする計画を立てています。 AutoMapperは、ソースとデスティネーションがマップされている限り、IEnumerableを別のマッピングなしでIEnumerableにマップするのに十分スマートであることを理解しています。

しかし、私はViewModelでIEnumerableを私のビューに渡すのをどう処理するのか混乱しています。私は現在IEnumerableを含むViewModelを使ってページを操作していますが、これはIEnumerableを直接ビューに渡すのと同じくらい悪いことを読んでいます。だから私は別のViewModelメインのViewModelのIEnumerableプロパティで使用されるオブジェクトを保持する必要がありますか?

だからここでの活動は、問題のモデルである:

public class ActivityHistoryViewModel 
{ 
    public IEnumerable<Activity> activities { get; set; } 
} 

私はActivityViewModelを作成し、このように私のActivityHistoryViewModelを書くために必要なのですか?

public class ActivityHistoryViewModel 
{ 
    public IEnumerable<ActivityViewModel> activities { get; set; } 
} 

これを行う簡単な方法はありますか?

答えて

1

はい、これは正しいです。

@model IEnumerable<ActivityViewModel> 

あなたの自動車マッパーの設定は次のようになります:あなたのモデルが必要となるデータのみがリストされ、その後、あなたが本当に ActivityHistoryViewModelを必要としないと、ビューのような入力することができると仮定すると、

Mapper.CreateMap<Activity, ActivityViewModel>(); 

IEnumerable<Activity> data = GetActivities(); 
var model = Mapper.Map<IEnumerable<Activity>, IEnumerable<ActivityViewModel>>(data); 
return View(model); 

をそして、あなたはActivityViewModelを定義するときは、プロパティのための財産重複型を作成するか、または過剰DATをトリム:

あなたは次のようにマップしますあなたは必要ありません(私の場合、それは "作成された日付"のようなもので、それは生成されたdbであり、ユーザーにとっては重要ではありません)。

それともあなただけのリストよりも一緒に渡すためにActivityHistoryViewModelに固執する場合:

ビュータイプ:

@model ActivityHistoryViewModel 

マッピングの設定は、このように同じ

マップままにすることができます:

IEnumerable<Activity> data = GetActivities(); 
var model = new ActivityHistoryViewModel() { 
    someOtherProperty = "hello world!", 
    activities = Mapper.Map<IEnumerable<Activity>, IEnumerable<ActivityViewModel>>(data) 
}; 
return View(model); 
+0

Duh、didn ' IEnumerable を渡すと思うことさえありません。しかし私は実際には、私が追加のデータを渡す必要があるより大きなシナリオを考えていました。 –

+0

代わりに 'ActivityHistoryViewModel'を使うコードを追加しました。あなたが探しているものを願ってください。 –

+0

素晴らしい、私はネストされたエンティティオブジェクトのプロパティへのカスタムマッピングを含むすべての作業を行うことができました。私はあなたの助けに感謝します。一度それを理解すると、いつでも簡単になります。 :) –

関連する問題