2009-02-26 15 views
5

मेरी नियंत्रक में नहीं, मैं निम्नलिखित है:Html.DropDownList पूर्व का चयन आइटम

ViewData["myList"] = 
    new SelectList(itemRepository.GetAll(), "Id", "Name", currentItem.Id); 

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

<%= Html.DropDownList("myItem", (SelectList)ViewData["myList"])%> 

प्रस्तुत की गई ड्रॉप डाउन सूची में आइटम की वर्तमान आईडी के साथ आइटम है IDem.Id पूर्व-चयनित है लेकिन यह नहीं है। कुछ भी नहीं चुना गया है, इसलिए यह पहले के लिए डिफ़ॉल्ट है।

यह आरसी/आरसी (रीफ्रेश) में अपडेट करने से पहले यह काम करता था। कोई विचार?

+0

यह अभी भी एक मुद्दा है जिसे मैं एमवीसी 1.0 –

उत्तर

6

आप तो दृश्य फ़ील्ड के नाम पर व्यूडेटा में कुंजी के नाम से मिलान करें, HtmlHelpers को व्यूडेटा के आधार पर पूरी तरह से खींचने के लिए डिज़ाइन किया गया है वह कुंजी

<%= Html.DropDownList("myList") %> 

HtmlHelpers जब उन्हें इस फैशन में उपयोग करते हुए सबसे अच्छा काम करने के लिए (हालांकि कि हमेशा संभव नहीं है) लगता है: मैं करने के लिए अपने दृष्टिकोण को कोड बदलने का सुझाव होगा।

अद्यतन:

कारण यह है जबकि अन्य तरीके नहीं, मैं SelectExtensions.cs के लिए कोड में कबूतर है काम करने के लिए लगता है क्यों उनका विस्तार करने के लिए ...

हालांकि आप कॉल DropDownList , निजी विधि SelectInternal अंततः वास्तविक HTML प्रस्तुत करता है। SelectInternal के लिए हस्ताक्षर लगता है:

DropDownList ("MyList")

DropDownList(string name) -> 
SelectInternal(null, name, htmlHelper.GetSelectData(name), true, false, null) 

DropDownList ("myItem":

SelectInternal(string optionLabel, string name, IEnumerable<SelectListItem> selectList, bool usedViewData, bool allowMultiple, IDictionary<string,object> htmlAttributes) 

यहाँ पथ DropDownList के दो प्रयोगों ले , (सिलेक्टलिस्ट) व्यूडाटा ["myList"]) ड्रॉपडाउन

List(string name, IEnumerable<SelectListItem> selectList) -> 
DropDownList(name, selectList, null /* object, htmlAttributes */) -> 
DropDownList(name, selectList, new RouteValueDictionary(htmlAttributes)) -> 
SelectInternal(null, name, selectList, false, false, htmlAttributes) 

तो दिन के अंत में, दो रास्तों के बीच अंतर यह है कि जिस तरह से है कि काम करता है सच SelectInternal के usedViewData पैरामीटर में गुजरता है, जिस तरह से वह काम नहीं करता गुजरता है, जबकि झूठी है।

यह मेरे होने की संभावना एक बग SelectInternal अंदर कहीं नहीं है कि लगता है जब usedViewDataझूठी है।

+0

यह काम करता है .. लेकिन क्यों ????? –

+0

इस काम के रूप में उत्तर के रूप में स्वीकार करते हैं। लेकिन @Hacked उम्मीद है कि यह भी देखेंगे। –

+0

@ ट्रॉय बीटीडब्ल्यू - मुझे यह स्पष्ट होना चाहिए कि एमवीसी ओवरलैर्ड्स द्वारा आपके लिए एकाधिक प्रश्न चिह्न निर्देशित नहीं किए गए थे। –

0

मुझे (MVC आर सी ताज़ा का उपयोग कर)

ध्यान में रखते हुए निम्नलिखित काम करता है:

<%= Html.DropDownList("NAME_OF_ITEM_ID_PROPERTY", (SelectList)ViewData["myList"]) %> 
अपने उदाहरण के लिए

ताकि शायद होगा:

<%= Html.DropDownList("Id", (SelectList)ViewData["myList"]) %> 
+0

हाय के साथ सामना कर रहा हूं, क्या यह नाम और आईडी "आईडी" नहीं बनायेगा? यह गलत होगा क्योंकि मुझे 'myItem' होने के लिए नाम और आईडी की आवश्यकता है क्योंकि यह फ़ॉर्म जमा करने की आईडी है। –

+0

क्या आपने इसे आजमाया है? प्रस्तुत एचटीएमएल भी देखें। जिस तरह से मैं इसे समझता हूं, आपके नियंत्रक में, आप मान फ़ील्ड को अपने आइटम मॉडल की आईडी मानते हैं, और नाम SelectListItem का मान मानते हैं। तो, ड्रॉपडाउन में आईडी में पहला पैरामीटर सेट करके, आप इस मान फ़ील्ड के लिए पूछते हैं। –

+0

हाँ मैंने कोशिश की। पहला पैरामीटर हमेशा प्रस्तुत ड्रॉपडाउन का नाम होता है। क्या यह तुम्हारे लिए नहीं है? –

0

मैंने बस अपना खुद का ड्रॉप-डाउन सहायक बनाया। संभवतः एक अंतर्निहित के रूप में उतना कुशल नहीं है, लेकिन यह काम करता है।

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