2010-09-30 8 views
10

Ho una tabella che contiene un elenco di EquipmentIDs e un'altra tabella con record di manutenzione.Asp.Net MVC 2 Visualizzazione a discesa System.Web.MVC.SelectListItem

Quando l'utente modifica un record di manutenzione, desidero che ci sia un elenco a discesa di tutti gli ID dell'apparecchiatura dalla tabella.

L'elenco a discesa viene compilato e viene compilato con il numero corretto di voci, tuttavia, tutte indicano System.Web.MVC.SelectListItem anziché il valore dell'ID.

Qui è il codice che genera l'elenco:

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

Ecco la voce nella pagina aspx per l'elenco a discesa:

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

Ecco come sto generando l'elenco dal la tabella:

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

Sembra che tutto funzioni correttamente ad eccezione dell'assegnazione il testo da visualizzare nella casella a discesa.

Cosa mi manca o non penso correttamente?

risposta

30

SelectList e SelectListItem si escludono a vicenda. Si dovrebbe usare uno o l'altro. Etiher passare il costruttore di SelectList il tuo dati grezzi (IDs) o non utilizzare SelectList affatto e solo fare ViewData["EquipIDs"] il numerabile di SelectListItem. Se segui il secondo approccio, dovrai modificare il tuo codice in modo tale da impostare l'elemento selezionato nel costruttore di SelectListItem (come avevi fatto, ma commentato).

O:

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

Oppure:

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

Grazie. Liberarsi della sezione centrale del codice e semplicemente inviare gli ID al costruttore SelectList ha fatto il trucco. – amarcy

Problemi correlati