2011-06-10 24 views
5

Estoy aprendiendo ASP.NET MVC. Tuve un pequeño problema al tratar con la lista desplegable.llenando una DropDownlist en ASP.NET MVC

Esto es lo que hice en controlador

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"); 

En la vista

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

Esto resulta en un error

No se puede convertir objeto de System.Collections tipo'. Generic.List 1[System.Int32]' to type 'System.Collections.Generic.IEnumerable 1 [System.Web.Mvc.SelectListItem] '. "

¿Cómo se puede resolver esto?

¿Cuál es la mejor manera de lidiar con llenar dropdownlist con una consulta?

Respuesta

4

Hay un error en el modelo.

Para solucionar usted puede hacer esto:

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

o esto:

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

En su código a es la lista de números enteros. No se puede incluir en la lista de SelectListItem.

Nota al margen: myList variable no se utiliza en su código.

+0

Gracias, que trabajaron –

0

Necesita convertir su lista de Int32 en una Lista/IEnumerable de SelectListItem 's. No puedes hacer esto como un lanzamiento directo (que es lo que estás tratando de hacer, y lo que tu error representa).

puede ajustar su consulta LINQ para devolver un IEnumerable<SelectListItem> cambiando el tipo de retorno de selección.

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

a continuación, puede cargarlo en un SelectList a través de:

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

Además, si usted tiene una lista desplegable que desea poblada con elementos de texto, puede hacer lo siguiente:

Controlador :

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); 
} 

Vista:

<div class="class"> 
    <%: Html.DropDownList("StoreTypeID", (SelectList)ViewData["StoreTypes"]) %> 
    <%--<%: Html.DisplayTextFor(model => model.StoreTypeID) %>--%> 
</div> 
Cuestiones relacionadas