У меня есть вид для редактирования конкретного проекта. Вот что я делаю для подготовки модели представления для этого вида:
- Получить информацию о проекте
- Подготовьте новый объект модели представления и сопоставьте мой проект с ним.
- Подготовьте TechnologyString, вызвав функцию для ее заполнения.
Отображение вида.
public ActionResult Edit(string slug)
{
// 1
Project project = m_ProjectBusiness.GetProject(slug);
// 2
ProjectEditViewModel viewModel = new ProjectEditViewModel
{
ProjectToEdit = Mapper.Map<Project, ProjectFullViewModel>(project)
};
// 3
viewModel.ProjectToEdit.TechnologyString = m_ProjectBusiness.ListTechnologies(project);
// 4
return View(viewModel);
}
Как вы можете видеть для пункта 3, я заполняю строку (TechnologyString), расположенную в моей модели представления, под моим объектом ProjectToEdit. Я хотел бы знать, возможно ли выполнить эту операцию напрямую (и автоматически), когда происходит сопоставление?
Спасибо.
EDIT
Я нашел решение, основанное на отображении. Вот оно:
Mapper.CreateMap<Project, ProjectFullViewModel>()
.ForMember(dest => dest.TechnologyString,
opt => opt.MapFrom(src => String.Join(" ", src.Technologies.Select(x => x.Name))));
Итак, я извлекаю все технологии, прикрепленные к моему проекту, и создаю строку со всеми элементами, разделенными пробелом.
Читатели: Обратите внимание, что приведенное ниже решение Дарина работает в случае, когда технологии не являются частью моей доменной модели. Но в этом случае это так.