2012-08-23 13 views
6

ho viewdata nel mio controller, che è popolato da una lista:compilazione di una discesa da Viewdata

List<employee> tempEmpList = new List<employee>(); 
tempEmpList = context.employees.ToList(); 
ViewData["tempEmpList"] = tempEmpList; 

e sto passando questo nel mio punto di vista, la domanda è: Come posso collocare il contenuto del viewdata elencare in un elenco a discesa?

I dati di visualizzazione saranno .name dall'elemento dell'elenco.

So che potrei fare un foreach sul Viewdata e creare un elenco di selezione, ma questo sembra un po 'lungo senza fiato

risposta

17

È possibile utilizzare l'helper DropDownList html:

@Html.DropDownList("SelectedEmployee", 
    new SelectList((IEnumerable) ViewData["tempEmpList"], "Id", "Name")) 

Nel costruttore SelectList è possibile specificare quali proprietà della classe devono essere utilizzate come testo e il valore nel menu a discesa (ad esempio "Id", "Nome")

Il nome del menu a discesa ("SelectedEmployee") verrà utilizzato quando si registrano i dati sul server.

+1

Ciò fa apparire l'errore: 'CS0305: Utilizzando il tipo generico 'System.Collections.Generic.IEnumerable ' richiede 1 Tipo arguments' Mi piace questo approccio però penso – JustAnotherDeveloper

+2

hai riferimento 'System.Collections.Generic' nella tua vista ma' SelectList' richiede 'System.Collections.IEnumerable' provalo con lo spazio dei nomi esplicito:' new SelectList ((System.Collections.IEnumerable) ViewData ["tempEmpList"], "Id", "Nome") ' – nemesv

+0

Ho lavorato, ho dovuto fare riferimento alla lista e ha funzionato bene :) – JustAnotherDeveloper

4

Configurare il ViewData in modo normale, l'assegnazione di un nome di chiave che mappa a una proprietà nel modello che sarà legato a Post ...

ViewData["ModelPropertyName"] = new SelectList(...) 

Quindi secondo lei è sufficiente aggiungere un Html.DropDownList. ..

@Html.DropDownList("ModelPropertyName") 
2

Si prega di provare con quello. Ho provato con MVC5

@Html.DropDownList("SelectedEmployee", new SelectList((System.Collections.IEnumerable) ViewData["tempEmpList"],"id","Name"))

Problemi correlati