2011-06-10 25 views
5

में ड्रॉपडाउनलिस्ट पॉप्युलेट करना मैं एएसपी.नेट एमवीसी सीख रहा हूं। ड्रॉपडाउन सूची से निपटने पर मुझे एक छोटी सी समस्या थी।एएसपी.नेट एमवीसी

यह है कि मैं क्या नियंत्रक

List<Int32> myList = new List<Int32>(); 
var a = (from m in datacontext.services 
       select m.ServiceID); 
myList = a.ToList(); 
ViewData["ServiceID"] = new SelectList((IEnumerable<SelectListItem>) 
           a.ToList(), "ServiceID", "ServiceID"); 

में किया था एक त्रुटि

प्रकार 'System.Collections की वस्तु कास्ट करने में असमर्थ में दृश्य

@Html.DropDownListFor(model => model.ServiceID, ViewData["ServiceID"] as SelectList) 

इस परिणाम में है। जेनेरिक। सूची 1[System.Int32]' to type 'System.Collections.Generic.IEnumerable 1 [सिस्टम.Web.Mvc.SelectListItem] '।

इसे कैसे हल किया जा सकता है?

एक क्वेरी के साथ populating ड्रॉपडाउन सूची से निपटने का सबसे अच्छा तरीका क्या है?

उत्तर

4

कलाकारों में एक त्रुटि है।

ठीक करने के लिए आप यह कर सकते हैं:

var a = datacontext.services.Select(arg => new { ServiceID = arg.ServiceID }).ToList(); 
ViewData["ServiceID"] = new SelectList(a, "ServiceID", "ServiceID"); 

या इस:

var a = datacontext.services.Select(arg => arg.ServiceID).ToList(); 
ViewData["ServiceID"] = new SelectList(a); 

अपने कोड a में पूर्णांकों की सूची है। इसे SelectListItem की सूची में नहीं डाला जा सकता है।

साइड नोट: myList चर आपके कोड में उपयोग नहीं किया जाता है।

+0

धन्यवाद, यह काम करता है –

0

आपको की अपनी सूची SelectListItem की सूची/IENumerable में परिवर्तित करने की आवश्यकता है। आप इसे सीधे कलाकार के रूप में करने में सक्षम नहीं हैं (जो आप करने की कोशिश कर रहे हैं, और जो आप त्रुटि दर्शाते हैं)।

आप चुनिंदा रिटर्न प्रकार को बदलकर IEnumerable<SelectListItem> वापस करने के लिए अपनी LINQ क्वेरी समायोजित कर सकते हैं।

var a = (from m in datacontext.services 
       select new SelectListItem{ Text = m.ServiceID.ToString(), Value = m.ServiceID.ToString() }); 

आप तो इसे में लोड कर सकते हैं एक SelectList के माध्यम से:

ViewData["ServiceID"] = new SelectList(a); 
0

इसके अलावा, अगर आप एक ड्रॉपडाउन सूची आप पाठ आइटम के साथ आबादी वाले चाहते है, तो आप क्या कर सकते हैं निम्नलिखित:

नियंत्रक :

public ActionResult Create() 
{ 
    var viewModel = new Store(); 
    var storeTypes = new SelectList(
         ( 
          from t in _db.StoreTypes 
          select new SelectListItem 
          { 
           Text = t.StoreTypeName, 
           Value = SqlFunctions.StringConvert((double)t.StoreTypeID) //convert int to string (yikes) 
          } 
         ) 
         , "Value", "Text"); 

    ViewData["StoreTypes"] = storeTypes;  
    return View(viewModel); 
} 

दृश्य:

<div class="class"> 
    <%: Html.DropDownList("StoreTypeID", (SelectList)ViewData["StoreTypes"]) %> 
    <%--<%: Html.DisplayTextFor(model => model.StoreTypeID) %>--%> 
</div> 
संबंधित मुद्दे