2010-01-15 25 views
6

在我的ASP.NET MVC 2(RC)項目中 - 我使用AutoMapper在Linq to Sql類(Media)和視圖模型(MediaVM)之間進行映射。視圖模型具有SelectList屬性,用於在視圖中下拉菜單。我有一個自定義的值解析器來從數據庫中填充SelectList屬性項,但我想知道是否有一種方法可以將源模型中的一對值傳入解析器(使用ConstructedBy方法?)a)定義選定的項目和b )過濾數據庫中的項目。源對象被傳遞到自定義解析器 - 但解析器用於具有不同類型源對象的幾個不同視圖模型,因此寧願定義從映射配置中獲取值的位置。這裏是我的視圖模型:AutoMapper - 如何使用ConstructedBy方法將參數傳遞到自定義解析器?

的automapper映射配置:

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

這將是很好能夠做這樣的事情在.ForMember映射子句:

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

有沒有辦法做到這一點?

+0

Bryan,你如何從數據庫填充SelectList? – awaisj 2011-11-17 11:44:21

回答

2

我發現你的帖子試圖做同樣的事情。我決定採用一種簡單的方法,並跳過直接通過AutoMaper映射到我的選擇列表。我只是返回一個數組到我的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"); 
      } 
     } 

我的映射:

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

好主意。謝謝! – Bryan 2010-01-17 20:35:50

8

我喜歡這個主意的功能要求。你可以用MapFrom做類似的事情:

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

謝謝吉米!希望你能聽到並確認我沒有失去明顯的東西。 – Bryan 2010-01-17 20:36:55

相關問題