5

जब आपके पास एक डोमेन ऑब्जेक्ट होता है जिसे एक ड्रॉप डाउन सूची की तरह इंटरफ़ेस नियंत्रण के रूप में प्रदर्शित करने की आवश्यकता होती है, तो ifwdev ने एक TooelectList() जोड़ने के लिए एक एक्सटेंशन विधि बनाने का सुझाव दिया।किसी डोमेन मॉडल ऑब्जेक्ट को इंटरफ़ेस ऑब्जेक्ट में बदलने के लिए C# एक्सटेंशन विधि को कैसे कोड करें?

मूल वस्तु ऑब्जेक्ट्स की एक सूची है जिसमें गुणों के समान गुण हैं। ड्रॉप और सूची के नीचे मूल्य गुण। असल में, यह सिलेक्टलिस्ट ऑब्जेक्ट्स की एक सूची है, सिर्फ उसी वर्ग के नाम की नहीं।

मुझे लगता है कि आप डोमेन ऑब्जेक्ट को इंटरफ़ेस ऑब्जेक्ट में बदलने के लिए प्रतिबिंब का उपयोग कर सकते हैं। किसी के पास सी # कोड के लिए कोई सुझाव है जो यह कर सकता है? SelectList SelectListItem की एक एमवीसी ड्रॉप डाउन सूची है।

निश्चित रूप से विचार ध्यान में रखते हुए इस तरह कुछ करने के लिए है:

<%= Html.DropDownList("City", 
     (IEnumerable<SelectListItem>) ViewData["Cities"].ToSelectList()) 
+0

प्रतिबिंब करके, मेरा मतलब है स्रोत ऑब्जेक्ट के गुणों पढ़ सकते हैं और selectList गुण के साथ उनका मिलान, एक उचित DropDownList चयन सूची लौटने। दृश्य मॉडल में चयनित चयन सूची डेटा रखने के लिए –

उत्तर

4

यह अपने ViewModel वस्तु की SelectList हिस्सा बनाने के लिए आसान है।

वैसे भी, तुम सिर्फ IEnumerable के माध्यम से लूप करने के लिए है और एक नया SelectList वस्तु के लिए प्रत्येक आइटम जोड़ सकते हैं और इसे वापस।

public static List<SelectListItem> ToSelectList<T>(this IEnumerable<T> enumerable, Func<T, string> text, Func<T, string> value, string defaultOption) 
{ 
    var items = enumerable.Select(f => new SelectListItem() { Text = text(f), Value = value(f) }).ToList(); 
    items.Insert(0, new SelectListItem() { Text = defaultOption, Value = "-1" }); 
    return items; 
} 

How to refactor these 2 similar methods into one?

+2

+1। परीक्षण करना बहुत आसान और आसान है। – Mark

+0

यदि आप कृपया, तो क्या आपके पास व्यूमोडेल पैटर्न का लिंक है? क्या हम डोमेन मॉडल के अलावा प्रत्येक दृश्य के लिए कक्षा बनाने के बारे में बात कर रहे हैं? मुझे लगता है कि भंडार इनमें से कोई भी वापस नहीं करेगा, तो क्या आप दृश्य मॉडल बनाने के लिए कारखानों का उपयोग करते हैं? –

+1

यहां आप यहां जाएं: http://nerddinnerbook.s3.amazonaws.com/Part6.htm। व्यूमोडेल एक क्लास ऑब्जेक्ट है जिसमें दृश्य को प्रस्तुत करने के लिए आवश्यक सभी डेटा शामिल हैं (सिलेक्टलिस्ट जैसी चीजों सहित)। –

4

इन दोनों एक्सटेंशन तरीकों मैं चयन सूची बनाने के लिए प्रयोग कर रहे हैं।

public static IEnumerable<SelectListItem> ToSelectList<T>(this IEnumerable<T> collection, Func<T, string> text, Func<T, string> value) 
{ 
    return collection.ToSelectList(text, value, x => false); 
} 

public static IEnumerable<SelectListItem> ToSelectList<T>(this IEnumerable<T> collection, Func<T, string> text, Func<T, string> value, Func<T, bool> selected) 
{ 
    return (from item in collection 
      select new SelectListItem() 
         { 
          Text = text(item), 
          Value = value(item), 
          Selected = selected(item) 
         }); 
} 

HTHs,
चार्ल्स

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