我有一个“列表”视图,它基本上接收IEnumerable(Thing)类型的模型。我无法控制事情;它是外在的。
那差不多了。 “Thing”的一个属性是旗帜。我想在视图中改进此属性的格式。我有read some strategies。我的计划是创建一个更了解格式的ViewModel。
我想知道是否有从IEnumerable(Thing)创建IEnumerable(ViewThing)的直接方法。
一种显而易见的方法是迭代IEnumerable of Things,对于每个Thing,我会创建一个ViewThing并用Thing的数据填充它,从而产生一个IEnumerable的ViewThings。
但是备份,我也有兴趣采用更智能的方式处理格式化标记以供查看。
答案 0 :(得分:1)
您可以使用AutoMapper在您的域模型和视图模型之间进行映射。我们的想法是您定义Thing
和ThingViewModel
之间的映射,然后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);
}
现在剩下的就是定义Thing
和ThingViewModel
之间的映射:
Mapper
.CreateMap<Thing, ThingViewModel>().
.ForMember(
dest => dest.SomeProperty,
opt => opt.MapFrom(src => ... map from the enum property)
)