2010-09-30 17 views
10

Tengo una tabla que contiene una lista de EquipmentIDs y otra tabla que tiene los registros de mantenimiento.Asp.Net MVC 2 desplegable Viendo System.Web.MVC.SelectListItem

Cuando el usuario edita un registro de mantenimiento que quiero que haya una lista desplegable de todos los identificadores de equipos de la tabla hacia abajo.

La lista desplegable se completa y se completa con la cantidad correcta de entradas; sin embargo, todas dicen System.Web.MVC.SelectListItem en lugar del valor de la ID.

Este es el código que genera la lista:

public ActionResult Edit(int id) 
{ 
    MaintPerformed maintPerformed = maintPerformedRepository.GetMaintPerformed(id); 

    IList<EquipmentID> IDs = equipmentIDRepository.GetEquipmentIDAsList(); 

    IEnumerable<SelectListItem> selectEquipList = 
     from c in IDs 
     select new SelectListItem 
     { 
      //Selected = (c.EquipID == maintPerformed.EquipID), 
      Text = c.EquipID, 
      Value = c.Sort.ToString() 
     }; 

    ViewData["EquipIDs"] = new SelectList(selectEquipList, maintPerformed.ID); 
    return View(maintPerformed); 
} 

Aquí es la entrada en la página .aspx de la lista desplegable:

%: Html.DropDownList("EquipIDs") %> 

Así es como estoy generando la lista de la tabla:

public List<EquipmentID> GetEquipmentIDAsList() 
    { 
     return db.EquipmentIDs.ToList(); 
    } 

parece que todo está funcionando correctamente con la excepción de la asignación el texto que se mostrará en el cuadro desplegable.

¿Cuál falto o no pensar correctamente acerca?

Respuesta

30

SelectList y SelectListItem en realidad son mutuamente excluyentes. Debería utilizar un o el otro. Etiher pase el constructor de SelectList su raw datos (IDs) o no use SelectList en absoluto y simplemente haga ViewData["EquipIDs"] su enumerable de SelectListItem. Si sigue este último método, deberá modificar su código para que esté configurando el elemento seleccionado en el constructor de SelectListItem (como lo hizo, pero con comentarios).

O bien:

ViewData["EquipIDs"] = new SelectList(IDs, maintPerformed.ID, "EquipID", "Sort"); 

O:

IEnumerable<SelectListItem> selectEquipList = 
    from c in IDs 
    select new SelectListItem 
    { 
     Selected = c.EquipID == maintPerformed.EquipID, 
     Text = c.EquipID, 
     Value = c.Sort.ToString() 
    }; 

ViewData["EquipIDs"] = selectEquipList; 
+0

Gracias. Deshacerse de la sección central del código y simplemente enviar ID al constructor SelectList hizo el truco. – amarcy