2009-12-01 12 views
25

में विकल्प टैग में जिम्मेदार बताते हैं मैं ASP.NET MVC का उपयोग कर रहा है, और, HtmlHelper.DropDownListFor विधि के साथ एक का चयन करें सूची प्रस्तुत करने के लिए कोशिश कर रहा हूँ तो जैसे:ASP.NET MVC: कस्टम डाल चयन सूची

<%= Html.DropDownListFor(x => x.AllTopics, SelectListHelper.GetSelectListItems(Model.AllTopics), "Select a Topic", new { id = "allTopics", @class = "topic-dropdown" })%> 

जहां SelectListHelper बस जो कुछ भी संग्रह हम में से गुजर रहे एक IList<SelectListItem> से वापस आती है। यह सरल बातों के लिए ठीक काम करता है, लेकिन मैं चयन सूची ही टैग (नहीं प्रत्येक विकल्प के लिए एक शीर्षक विशेषता जोड़ने के लिए सक्षम होना चाहते हैं)। लेकिन DropDownListFor केवल IEnumerable<SelectListItem> में लेता है, और SelectListItem में कोई स्थान नहीं है जिसे मैं शीर्षक विशेषता में डाल सकता हूं।

क्या DropDownListFor विधि से पहले बिना चयन करने और चुनिंदा सूची और प्रत्येक तत्व को हाथ से लिखने का कोई तरीका है?

उत्तर

2

MVC स्रोत कोड को देखते हुए, DropDownListForDropDownList का उपयोग करता है, जो SelectInternal का उपयोग करता है, जो ListItemToOption, जो TagBuilder के लिए कॉल लपेटता उपयोग करता है। जब वास्तविक विकल्प टैग बनाया गया है तो आप टैगबिल्डर को अतिरिक्त कॉल स्वीकार करने के लिए इस स्रोत को संशोधित और शामिल कर सकते हैं।

+1

हां, यही वह है जो मैं कर रहा हूं ... मूल रूप से .NET परावर्तक से कोड का एक गुच्छा निकाल रहा है। काम करने लगता है, लेकिन मुझे अन्य परेशानियों के कारण मुझे परेशान करता है क्योंकि ये विधियां ऐसा प्रतीत होती हैं, जो समझने में कठोर हो सकती हैं। मुझे लगता है कि हम इसे ठीक कर देंगे जैसे यह जाता है। – amkessel

+2

परावर्तक का उपयोग करने की कोई आवश्यकता नहीं है; एएसपी.नेट एमवीसी के लिए कोड सार्वजनिक रूप से उपलब्ध है: http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471 –

4

DropDownList और डेरिवेटिव्स आप जिस कार्यक्षमता की तलाश में हैं उसका समर्थन नहीं करते हैं। लेकिन आप DropDownList द्वारा वापस की गई स्ट्रिंग को भी संसाधित कर सकते हैं।

<%= 
    Html.DropDownListFor(x => x.AllTopics, 
    SelectListHelper.GetSelectListItems(Model.AllTopics), 
    "Select a Topic", 
    new { id = "allTopics", @class = "topic-dropdown" }) 
    .Replace("<option", "<option attr=\"value\"") 
%> 
+9

यह ** ** सबसे आसान होगा, लेकिन समस्या तब उत्पन्न होती है जब मुझे एक अलग की आवश्यकता होती है प्रत्येक विकल्प के लिए शीर्षक विशेषता के लिए मूल्य। फिर यह स्ट्रिंग हेरफेर का एक दुःस्वप्न बन जाता है। – amkessel