从IEnumerable模型中初始化IEnumerable ViewModels

时间:2012-07-03 21:07:32

标签: asp.net asp.net-mvc linq

我有一个“列表”视图,它基本上接收IEnumerable(Thing)类型的模型。我无法控制事情;它是外在的。

那差不多了。 “Thing”的一个属性是旗帜。我想在视图中改进此属性的格式。我有read some strategies。我的计划是创建一个更了解格式的ViewModel。

我想知道是否有从IEnumerable(Thing)创建IEnumerable(ViewThing)的直接方法。

一种显而易见的方法是迭代IEnumerable of Things,对于每个Thing,我会创建一个ViewThing并用Thing的数据填充它,从而产生一个IEnumerable的ViewThings。

但是备份,我也有兴趣采用更智能的方式处理格式化标记以供查看。

1 个答案:

答案 0 :(得分:1)

您可以使用AutoMapper在您的域模型和视图模型之间进行映射。我们的想法是您定义ThingThingViewModel之间的映射,然后AutoMapper将负责映射这些对象的集合,以便您不必迭代:

public ActionResult Foo()
{
    IEnumerable<Thing> things = ... get the things from whererver you are getting them
    IEnumerable<ThingViewModel> thingViewModels = Mapper.Map<IEnumerable<Thing>, IEnumerable<ThingViewModel>>(things);
    return View(thingViewModels);
}

现在剩下的就是定义ThingThingViewModel之间的映射:

Mapper
    .CreateMap<Thing, ThingViewModel>().
    .ForMember(
        dest => dest.SomeProperty,
        opt => opt.MapFrom(src => ... map from the enum property)
    )