У меня есть модель представления, которая должна отображать определенное поле IEnumerable
в виде разделенного точкой с запятой текстового поля. Сначала я думал об использовании DefaultModelBinder
для его преобразования, но мне было трудно думать, как добиться этого в обоих направлениях (dto <-> viewmodel).
Псевдонимы - это поле, которое я пытаюсь отобразить как одно текстовое поле, разделенное точкой с запятой.
public class Parent
{
public IEnumerable<Child> Children { get; set; }
}
public class Child
{
public IEnumerable<string> Nicknames { get; set; }
}
Поэтому я решил попробовать AutoMapper, я создал две ViewModels:
public class ParentViewModel
{
public IEnumerable<ChildViewModel> Children { get; set; }
}
public class ChildViewModel
{
public string Nicknames { get; set; }
}
Затем я создал сопоставления, подобные этому, для детей (для краткости опущено обратное преобразование)
Mapper.CreateMap<Child, ChildViewModel>().ForMember(
d => d.Nicknames, o => o.ResolveUsing<ListToStringConverter>().FromMember(s => s.Nicknames);
Затем для родителя создали наивную карту (опять же, опущено в обратном направлении)
Mapper.CreateMap<Parent, ParentViewModel>();
Я действительно ожидал, что дочерние отображения происходят автоматически, но они этого не делают, я уже создал слишком много «правильного» кода, чтобы решить действительно простую проблему, которая в любой другой более простой / старой среде без MVC, я бы покончим с давным-давно :) Как я могу продолжить и сказать AutoMapper преобразовывать детей без написания другого "распознавателя для детей".
Обдумал ли я это, и есть более простой способ?
Спасибо!