2010-01-15 10 views
6

W moim projekcie ASP.NET MVC 2 (RC) - używam AutoMappera do mapowania między klasą Linq a Sql (Media) i modelem widoku (MediaVM). Model widoku ma właściwość SelectList dla rozwijanego widoku. Mam program do przeliczania wartości niestandardowej, aby zapełnić elementy właściwości SelectList z bazy danych, ale zastanawiam się, czy istnieje sposób przekazania wartości para z modelu źródłowego do resolvera (przy użyciu metody ConstructedBy?) Do a) zdefiniowania wybranego elementu i b) filtruj elementy z bazy danych. Obiekt źródłowy zostaje przekazany do niestandardowego przelicznika - ale resolver jest używany w kilku różnych modelach widoków z różnymi typami obiektów źródłowych, więc wolałby zdefiniować skąd pobrać wartości z mojej konfiguracji odwzorowania. Oto mój widok model:AutoMapper - Jak przekazać parametry do Custom Resolver za pomocą metody ConstructedBy?

config mapowania automapper:

Mapper.CreateMap<Media, MediaVM>() 
     .ForMember(dest => dest.slUsers, opt => opt.ResolveUsing<UsersSelectListResolver>()); 

Byłoby miło być w stanie zrobić coś takiego na klauzuli mapowania .ForMember:

.ConstructedBy(src => new UsersSelectListResolver(src.UserID, src.FilterVal)) 

Czy istnieje sposób, aby to osiągnąć?

+0

Bryan, w jaki sposób wypełnić SelectList z DB? – awaisj

Odpowiedz

2

Znalazłem twoje posty próbujące zrobić to samo. Zdecydowałem się na proste podejście i pominąłem próbę mapowania do mojej listy wyboru bezpośrednio przez AutoMaper. Po prostu zwracam tablicę do mojego ViewModelu i odwołuję się do tego obiektu dla mojej listy wyboru. Tablica zostanie zmapowana, obiekt listy select nie. Prosty, skuteczny. A IMHO każdy robi to przeznaczone zadanie - mapy Mapper, ViewModel Czy układ

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

mój mapowania:

Mapper.CreateMap<Criterion, CriterionForm>() 
      .ForMember(dest => dest.CriterionTypeList, opt => opt.Ignore());  
+0

Dobry pomysł. dzięki! – Bryan

8

mi się podoba ten pomysł jako żądanie funkcji. Możesz zrobić coś takiego teraz, z MapFrom:

ForMember(dest => dest.slUsers, opt => opt.MapFrom(src => new UsersSelectListResolver(src).Resolve(src)); 
+0

dzięki jimmy! miałem nadzieję, że zadzwonisz i potwierdzisz, że nie przeoczyłem czegoś oczywistego. – Bryan

Powiązane problemy