В моем (RC) ASP.NET MVC 2 проект - я использую AutoMapper для отображения между Linq на класс Sql (Медиа) и моделью представления (MediaVM). Модель представления имеет свойство SelectList для выпадающего в представлении. У меня есть пользовательский сопоставитель значения для заполнения объектов свойства SelectList от дб, но задаюсь вопросом, существует ли способ передать пару значений от исходной модели в сопоставитель (использующий метод ConstructedBy?) для a) определить выбранный пункт и b) отфильтровать объекты от дб. Исходный объект передается в пользовательский сопоставитель - но сопоставитель используется на нескольких моделях другого представления с различными типами исходных объектов, так определили бы, где получить значения от в моей конфигурации отображения. Вот моя модель представления:
public class MediaVM
{
public bool Active { get; set; }
public string Name { get; set; }
[UIHint("DropDownList")]
[DisplayName("Users")]
public SelectList slUsers { get; private set; }
}
Конфигурация отображения автокартопостроителя:
Mapper.CreateMap<Media, MediaVM>()
.ForMember(dest => dest.slUsers, opt => opt.ResolveUsing<UsersSelectListResolver>());
Было бы хорошо смочь сделать что-то вроде этого на.ForMember отображающийся пункт:
.ConstructedBy(src => new UsersSelectListResolver(src.UserID, src.FilterVal))
Существует ли способ выполнить это?
Я нашел вашу публикацию, пытаясь сделать то же самое. Я решил простым подходом и пропустить попытку отображать в мой список выбора напрямую через Autommer. Я просто возвращаю массив в свой ViewModel и ссылаюсь на этот объект для моего списка выбора. Массив становится сопоставленным, выберите «Список». Простой, эффективный. И, ИМХО каждый делает это предполагаемое задание - Mapper Maps, ViewModel делает макет
View Model code:
[DisplayName("Criterion Type")]
public virtual CriterionType[] CriterionTypes { get; set; }
[DisplayName("Criterion Type")]
public SelectList CriterionTypeList
{
get
{
return new SelectList(CriterionTypes, "Id", "Key");
}
}
My Mapper:
Mapper.CreateMap<Criterion, CriterionForm>()
.ForMember(dest => dest.CriterionTypeList, opt => opt.Ignore());
Мне нравится эта идея как запрос на функцию. Теперь вы можете сделать что-то подобное прямо сейчас, с MapFrom:
ForMember(dest => dest.slUsers, opt => opt.MapFrom(src => new UsersSelectListResolver(src).Resolve(src));