दिलचस्प पोस्ट
CSS3 फिल्टर धुंध के साथ परिभाषित किनारों फेसबुक कनेक्ट- $ user_id = $ facebook-> getUser (); हमेशा वापस 0 वीबीए कोड चल नहीं होता है जब कोई सूत्र सूत्रानुसार बदल जाता है एक पायथन स्क्रिप्ट चलते समय vcvarsall.bat नहीं मिल सकता प्रोग्रामिंग आईफोन पर मेमोरी उपयोग को पुनर्प्राप्त करें समूहीकृत SQL परिणामों के प्रत्येक समूह के लिए अधिकतम मूल्य के साथ रिकॉर्ड प्राप्त करें रिक्त स्थान के साथ jquery आईडी मोंगोडीबी की $ की खंड गारंटी आदेश में है jQuery का चयन करें और टेक्स्टनोड लपेटें पायथन में एक "कॉल करने योग्य" क्या है? वेब एप से मोबाइल के कैमरे तक कैसे पहुंचें? Strings.xml में किसी अन्य स्ट्रिंग से एक स्ट्रिंग को संदर्भित करें? Django में एक या क्वेरी फ़िल्टर को गतिशील रूप से कैसे लिखें? क्या jqGrid होवर पाठ को AddRowData के साथ परिभाषित किया जा सकता है? स्ट्रिंग्स को स्टोर करने के लिए डेटा टाइप "टेक्स्ट" का उपयोग करने की कोई डाउनसाइड्स?

क्यों 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 नहीं करता है?

वेब के समाधान से एकत्रित समाधान "क्यों 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" };