दिलचस्प पोस्ट
UICollectionView प्रविष्टि विफलता पायथन में "वैश्विक" कीवर्ड का प्रयोग जावास्क्रिप्ट क्या एकल-थ्रेडेड होने की गारंटी है? Jquery का उपयोग करके एक चयन के चयनित विकल्प का पाठ कैसे प्राप्त करें? रेल 4 – मजबूत पैरामीटर – नेस्टेड ऑब्जेक्ट्स जावास्क्रिप्ट में फ़ंक्शन पैरामीटर के रूप में एक सरणी को पास करना java.lang.ClassNotFoundException: com.mysql.jdbc.Driver in Eclipse स्पार्क 2.0 डेटासेट बनाम डेटाफ़्रेम पीएल / पीजीएसक्यूएल के साथ पोस्टग्रेएसक्यूएल में एक रिकॉर्ड के रूप में कई फ़ील्ड लौटें पसंदीदा इंटरफेसऑरेंटेशनफॉरियोजन को एक समर्थित इंटरफ़ेस ओरिएंटेशन वापस करना होगा मैं पायथन में एक 'एन्यूम' का प्रतिनिधित्व कैसे कर सकता हूं? मैं मैटलैब के ब्लैकप्रोक (ब्लॉकप्रोक) फ़ंक्शन के समान ब्लॉकों में एक अंडाकार सरणी कैसे संसाधित कर सकता हूं C फ़ंक्शन किसी खास स्थान पर पाठ में मौजूदा टेक्स्ट को ओवर-लिस्ट किए बिना सम्मिलित करने के लिए GitHub को पुश नहीं कर सकते – यह कहता रहता है कि मर्ज की आवश्यकता है Regex का उपयोग करके स्ट्रिंग्स से आईपी पते निकालें

क्यों DropDownListFor सबमिट करने के बाद एकाधिक चयन खो देते हैं, लेकिन ListBoxFor नहीं करता है?

मैंने मल्टीएसईलेक्टिस्ट का उपयोग करने के बारे में कई लेख पढ़े हैं और अभी तक यह समझने में है कि मेरे DropDownListFor में क्या गलत हो रहा है मेरे पास एक समान सूची, दृश्य मॉडेल और डेटा के साथ एक सूचीबॉक्स है जो ठीक काम करता है मैं DropDownListFor का उपयोग करना चाहता हूँ क्योंकि इसके विकल्पलेबल पैरामीटर जो ListBoxFor नहीं है।

जब व्यू पहले लोड होता है, तो ड्रॉपडाउन लिस्टफोर और लिस्ट बॉक्स दोनों के लिए एकाधिक चयनित आइटम दिखाते हैं।

आरंभिक देखें

जब सबमिट बटन क्लिक किया जाता है, तो चयनित आइटम संग्रह को वापस नियंत्रक की कार्रवाई में पोस्ट किया जाता है और दृश्य सूचीबॉक्स से ताज़ा होता है, अभी भी चयनित आइटम दिखाए जा रहे हैं, लेकिन DropDownListFor केवल एक चयनित आइटम दिखा रहा है।

ताज़ा दृश्य नियंत्रक कार्रवाई इस तरह से MultiSelectList का निर्माण कर रही है:

vm.TasksFilterGroup.Assignees = new MultiSelectList(employees, "Id", "FullName", new string[] { "51b6f06a-e04d-4f98-88ef-cd0cfa8a2757", "51b6f06a-e04d-4f98-88ef-cd0cfa8a2769" }); 

दृश्य कोड इस तरह दिखता है:

 <div class="form-group"> <label>ListBoxFor</label> @Html.ListBoxFor(m => m.TasksFilterGroup.SelectedAssignees, Model.TasksFilterGroup.Assignees, new { @class = "form-control", multiple = "multiple" }) </div> <div class="form-group"> <label>DropDownListFor</label> @Html.DropDownListFor(m => m.TasksFilterGroup.SelectedAssignees, Model.TasksFilterGroup.Assignees, new { @class = "form-control", multiple = "multiple" }) </div> 

क्यों DropDownListFor सबमिट करने के बाद एकाधिक चयन खो देते हैं, लेकिन ListBoxFor नहीं करता है?

Solutions Collecting From Web of "क्यों DropDownListFor सबमिट करने के बाद एकाधिक चयन खो देते हैं, लेकिन ListBoxFor नहीं करता है?"

जैसा कि विधियों के नामों का मतलब है, DropDownListFor() एक <select> (1 विकल्प का चयन करने के लिए) और ListBoxFor() बनाने के लिए है एक <select multiple> (कई विकल्पों का चयन करने के लिए ListBoxFor() बनाने के लिए है जबकि दोनों तरीकों से बहुत सारे आम कोड साझा होते हैं, वे अलग-अलग परिणाम देते हैं।

multiple="multiple" विशेषता को जोड़ना प्रदर्शन बदलता है, लेकिन यह इन विधियों द्वारा निष्पादित कोड की कार्यक्षमता को परिवर्तित नहीं करता है।

यदि आप स्रोत कोड का निरीक्षण करते हैं, तो आप ध्यान दें कि private static MvcHtmlString DropDownListHelper() अंततः private static MvcHtmlString DropDownListHelper() विधि को कॉल करते हैं, और इसी तरह ListBoxFor() अंततः private static MvcHtmlString ListBoxHelper() विधि को कॉल करता है।

ये दोनों विधियां private static MvcHtmlString SelectInternal() विधि को private static MvcHtmlString SelectInternal() , लेकिन अंतर यह है कि DropDownListHelper() allowMultiple = false जबकि ListBoxHelper() पास की अनुमति allowMultiple = true

SelectInternal() विधि के भीतर, कोड की कुंजी रेखा है

 object defaultValue = (allowMultiple) ? htmlHelper.GetModelStateValue(fullName, typeof(string[])) : htmlHelper.GetModelStateValue(fullName, typeof(string)); 

defaultValue विकल्प का मान तब <option> तत्वों के लिए html का निर्माण करते समय उपयोग किया जाता है और selected विशेषता (नों) को सेट करने के लिए उपयोग किया जाता है

ListBoxFor() के मामले में, defaultValue का मान आपके SelectedAssignees हुए ListBoxFor() संपत्ति द्वारा परिभाषित सरणी होगा। DropDownListFor() के मामले में यह null वापस आती है क्योंकि आपकी संपत्ति का मान string (इसकी एक सरणी) में डाली नहीं जा सकती।

चूंकि defaultValue null , <option> तत्वों में से कोई भी selected विशेषता सेट नहीं है और आप मॉडल बाध्यकारी खो देते हैं।

एक साइड नोट के रूप में, यदि आप मॉडल को पास में देखने के पहले GET विधि में SelectedAssignees हुए एसाइंस के मान सेट करना चाहते हैं, तो आप देखेंगे कि ऊपर दिए गए कारणों के लिए DropDownListFor() का उपयोग करते समय आप उनमें से कोई भी चयन नहीं किया जाएगा

यह भी ध्यान दें कि चयन सूची बनाने के लिए कोड होना चाहिए

 vm.TasksFilterGroup.Assignees = new SelectList(employees, "Id", "FullName" }); 

DropDownListFor() या ListBoxFor() विधियों का उपयोग करते हुए 3 पैरामीटर सेट करने का कोई मतलब नहीं है क्योंकि यह आपकी बाध्यकारी संपत्ति (संपत्ति के मूल्य) ( SelectedAssignees ListBoxFor() ) को निर्धारित करता है कि कौन से विकल्प चुने गए हैं (3 पैरामीटर को तरीकों से अनदेखा किया गया है)। अगर आप चाहें तो विकल्प चुनने के लिए चुने हुए ग्रिड मूल्यों के ऑप्टिशन मिलान करना चाहते हैं, तो GET विधि में, उपयोग करें

 vm.TasksFilterGroup.SelectedAssignees= new string[]{ "51b6f06a-e04d-4f98-88ef-cd0cfa8a2757", "51b6f06a-e04d-4f98-88ef-cd0cfa8a2769" };