0

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

那已经差不多好了。'Thing' 的属性之一是标志的枚举。我想改进视图中此属性的格式。我已经阅读了一些策略。我的计划是创建一个更了解格式化的 ViewModel。

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

一个明显的方法是遍历事物的 IEnumerable,我将为每个事物创建一个 ViewThing 并用事物的数据填充它,从而产生一个 ViewThings 的 IEnumerable。

但是备份,我也对更智能的方法来处理格式化标志以供查看感兴趣。

4

1 回答 1

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);
}

现在剩下的就是定义 aThing和之间的映射ThingViewModel

Mapper
    .CreateMap<Thing, ThingViewModel>().
    .ForMember(
        dest => dest.SomeProperty,
        opt => opt.MapFrom(src => ... map from the enum property)
    )
于 2012-07-03T21:22:09.137 回答