7

मैं दृश्य में ड्रॉपडाउन सूची प्रस्तुत करने के लिए DropDownListFor का उपयोग कर रहा हूं। किसी भी तरह से प्रस्तुत सूची SelectListItemSelectedtrue पर सेट नहीं करती है।एएसपी.नेट एमवीसी ड्रॉपडाउन लिस्टफोर SelectListItem का सम्मान नहीं करता है। चयनित

नियंत्रक कार्रवाई में:

var selectList = sortedEntries.Select(entry => new SelectListItem 
          { 
           Selected = entry.Value.Equals(selectedValue), 
           Text = entry.Value, 
           Value = entry.Id 
          }); 

return View(new DropDownListModel 
      { 
       ListId = id, 
       SelectList = selectList, 
       OptionLabel = "Click to Select" 
      }); 

ध्यान में रखते हुए:

  1. यकीन है कि वहाँ के साथ एक और केवल एक आइटम बनाने:

    <%= Html.DropDownListFor(m => m.ListId, 
        Model.SelectList, 
        Model.OptionLabel, 
        new {@class="someClass"}) %> 
    

    मैं निम्नलिखित की कोशिश की है Selectedtrue पर सेट करें।

  2. विकल्प लेबल तर्क को हटा दें।
  3. HTML विशेषता ऑब्जेक्ट को हटा दें। DropDownListFor में
  4. उपयोग SelectList:

Html.DropDownListFor(m => m.ListId, 
     new SelectList(Model.SelectList, "Value", "Text", 
      new List<SelectListItem>(Model.SelectList).Find(s => s.Selected)), 
     new {@class="someClass"}) 

क्या गलत हुआ है के रूप में कोई सुझाव?

संपादित:

अधिक जानकारी:

  • यह क्रिया एक बच्चे कार्रवाई, HTML.RenderAction

उत्तर

4

के साथ एक और दृश्य द्वारा कहा जाता है इस तरह का प्रयास करें:

var selectList = sortedEntries.Select(entry => new SelectListItem 
{ 
    Text = entry.Value, 
    Value = entry.Id 
}); 

return View(new DropDownListModel 
{ 
    // The drop down list is bound to ListId so simply set its value 
    // to some element value in the list and it will get automatically 
    // preselected 
    ListId = selectedValue, 
    SelectList = selectList, 
    OptionLabel = "Click to Select" 
}); 

और ध्यान में रखते हुए:

<%= Html.DropDownListFor(
    m => m.ListId, 
    new SelectList(Model.SelectList, "Value", "Text"), 
    Model.OptionLabel, 
    new { @class = "someClass" } 
) %> 

एक और पकड़ लिया हो सकता है: यदि आप किसी POST- कार्रवाई में चयनित मान बदलने के लिए कोशिश कर रहे हैं। उदाहरण के लिए आपने एक फॉर्म प्रस्तुत किया है, उपयोगकर्ता ने ड्रॉपडाउन में कुछ मूल्य चुना है, फ़ॉर्म सबमिट किया है और अपनी पोस्ट एक्शन में आप इस चयनित मूल्य पर कुछ प्रोसेसिंग करते हैं और जब आप दृश्य को फिर से चलाते हैं तो आप ड्रॉप डाउन सूची को कुछ अन्य मूल्य चुनना चाहते हैं । ,

// do this before returning the view and only if your scenario 
// corresponds to what I described above 
ModelState.Remove("ListId"); 
+0

ModelState.Remove ("ListId") कुंजी है। धन्यवाद। –

6

DropDownListFor हमेशा मूल्य कि लिस्टबॉक्स के लिए है का चयन करेंगे तो: इस मामले में आप प्रारंभिक चयन जो ModelState या एचटीएमएल सहायक में निहित है दूर करने के लिए मॉडल में चयनित मान पर ध्यान नहीं देगा होगा इस मामले में यह ListId के मान को देखेगा और उस आइटम को चयनित सूची में बना देगा। यदि ListId सूची में नहीं मिला है, तो पहला आइटम (या डिफ़ॉल्ट टेक्स्ट) चुना जाएगा। यदि आप चयनित विशेषता के आधार पर चयन की गई सूची चाहते हैं तो ड्रॉपडाउनलिस्ट का उपयोग करें (इसके बिना, उस मामले में आपको इसे स्वयं नाम देना होगा)।

तो आपके मामले में यह काम करेगा:

var selectList = sortedEntries.Select(entry => new SelectListItem 
{ 
    Text = entry.Value, 
    Value = entry.Id 
}); 

return View(new DropDownListModel 
{ 
    ListId = selectedValue, 
    SelectList = selectList, 
    OptionLabel = "Click to Select" 
}); 
+0

मैं 'ड्रॉपडाउनलिस्ट' का उपयोग करके समाप्त हुआ, जो मुझे चुनिंदा नियंत्रण के लिए एक आईडी निर्दिष्ट करने के साथ-साथ 'selectListItem' में एक चयनित मान निर्दिष्ट करने की अनुमति देता है। स्पष्टीकरण के लिए धन्यवाद! –

5

मैं एक ही मॉडल पर एक ही समस्या मिल गया (निर्णय में अन्य मॉडलों कोई समस्या नहीं के साथ)

काम नहीं करता:

@Html.DropDownListFor(o => o.Drivers.ValueListItems.Value, Model.Drivers.ValueListItems, new { size = Model.Drivers.ValueSizeList, Multiple = "multiple" }) 

निर्माण पूरी तरह से, तत्वों का चयन किया:

@Html.DropDownListFor(o => o.Drivers.ValueListItems.ToDictionary(u=>u.Value).Values, Model.Drivers.ValueListItems, new { size = Model.Drivers.ValueSizeList, Multiple = "multiple" }) 
+0

इसके साथ एकमात्र समस्या यह है कि नियंत्रण का नाम अब "मान" होगा। –

0

इस समस्या के लिए समाधान सरल है कि हम सब लगता है ...

सभी हम क्या करने के लिए बाध्य है कि लटकती तत्व के लिए दृश्य मॉडल पर संपत्ति के लिए निर्धारित है की जरूरत है - अर्थात्: के लिए ListId = 3 उदाहरण

इस तरह से जब हम ऐसा करते हैं

Html.DropDownListFor(m => m.ListId, 
    new SelectList(Model.SelectList, "Value", "Text", 
     new List<SelectListItem>(Model.SelectList).Find(s => s.Selected)), 
    new {@class="someClass"}) 

HtmlHelper स्वचालित रूप से

साधारण DropDownList पर प्रदर्शित करने के लिए डिफ़ॉल्ट मान लेने जाएगा!

आशा है कि यह आपको और अन्य सभी की मदद कर सके - जैसे मेरे! - इस स्पष्ट मुद्दे के समाधान के लिए बहुत समय खो गया है।

+1

क्षमा करें दोस्त, पूरी तरह से काम नहीं करता है। –

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