2010-01-15 19 views
6

मेरे एएसपी.नेट एमवीसी 2 (आरसी) प्रोजेक्ट में - मैं एक लिंक से एसक्यूएल क्लास (मीडिया) और एक व्यू मॉडल (मीडियावीएम) के बीच मैप करने के लिए ऑटोमैपर का उपयोग कर रहा हूं। दृश्य मॉडल में दृश्य में ड्रॉप डाउन के लिए एक चयनसूची संपत्ति है। मेरे पास डीबी से सिलेक्टलिस्ट संपत्ति आइटमों को पॉप्युलेट करने के लिए एक कस्टम वैल्यू रिज़ॉल्यूवर है, लेकिन मुझे आश्चर्य है कि स्रोत मॉडल से कुछ मूल्यों को रिज़ॉल्यूवर (कन्स्ट्रक्टेड बी विधि का उपयोग करके) में पास करने का कोई तरीका है) चयनित आइटम को परिभाषित करें और बी) डीबी से वस्तुओं को फ़िल्टर करें। स्रोत ऑब्जेक्ट कस्टम रिज़ॉल्वर में पारित हो जाता है - लेकिन संकल्प का उपयोग विभिन्न प्रकार के स्रोत ऑब्जेक्ट्स के साथ कई अलग-अलग दृश्य मॉडल पर किया जाता है, इसलिए यह परिभाषित करेगा कि मेरे मैपिंग कॉन्फ़िगरेशन से मूल्य कहां प्राप्त करें। यहाँ मेरे विचार मॉडल है:ऑटोमैपर - कन्स्ट्रक्टेड बाई विधि का उपयोग कर कस्टम रिजॉल्वर में पैरामीटर कैसे पास करें?

automapper मानचित्रण config:

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

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

यह .ForMember मानचित्रण खंड पर इस तरह कुछ करने के लिए सक्षम होने के लिए अच्छा होगा

क्या इसे पूरा करने का कोई तरीका है?

+0

ब्रायन, आप डीबी से सिलेक्टलिस्ट को कैसे पॉप्युलेट करते हैं? – awaisj

उत्तर

2

मुझे आपकी पोस्टिंग एक ही चीज़ करने की कोशिश कर रही है। मैंने एक सरल दृष्टिकोण पर फैसला किया और ऑटोमैपर के माध्यम से सीधे मेरी चयन सूची में मैप करने का प्रयास छोड़ दिया। मैं बस अपने व्यूमोडेल में एक सरणी लौटाता हूं और संदर्भित करता हूं कि मेरी चयन सूची के लिए ऑब्जेक्ट। सरणी मैप हो जाती है, सूची वस्तु का चयन नहीं करता है। सरल, प्रभावी।

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

अच्छा विचार। धन्यवाद! – Bryan

8

मैं एक सुविधा का अनुरोध के रूप में है कि विचार पसंद: - और, IMHO प्रत्येक यह कार्य उद्देश्य से कर रही है नक्शाकार नक्शे, 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"); 
      } 
     } 

मेरी नक्शाकार करता है। आप अभी ऐसा कुछ कर सकते हैं, MapFrom:

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

धन्यवाद जिमी! उम्मीद कर रहा था कि आप इसमें झुकेंगे और पुष्टि करेंगे कि मैं कुछ स्पष्ट नहीं खो रहा था। – Bryan

संबंधित मुद्दे