2010-06-30 14 views
21

Sto estendendo un Enum e, dato il seguente codice, selectListItems è un elenco generico di SelectListItems che ha tutti i valori corretti per il mio Enum.Problema con ASP.Net MVC SelectLIst e List <SelectListItems>

Il primo ciclo foreach funziona correttamente. Tuttavia, quando creo la lista di selezione effettiva e passaggio in selectListItems, tutti i valori sono persi. Come posso mantenere intatti questi valori?

foreach (SelectListItem item in selectListItems) 
{ 
    string tex = item.Text; 
    string val = item.Value; 
    string sel = item.Selected.ToString(); 
} 

SelectList selectList = new SelectList(selectListItems); 

foreach (SelectListItem slid in selectList) 
{ 
    string tex = slid.Text; 
    string val = slid.Value; 
    string sel = slid.Selected.ToString(); 
} 
+1

SelectList selectList = new SelectList (selectListItems, "Text", "Value"); Questo funziona. Non sono sicuro del perché non funzioni senza di esso però. Chiunque? – Ted

risposta

50

È necessario modificare la linea in cui è stata creata per indicare dove cercare i valori. Nel tuo caso sarebbe:

SelectList selectList = new SelectList(selectListItems, "Value", "Text"); 

Questo non porterà sopra l'elemento selezionato però. In questo caso dovrai capire quale oggetto dovrebbe essere selezionato e passare il suo valore attraverso il quarto parametro.

Ecco un esempio:

List<SelectListItem> items = new List<SelectListItem>(); 
items.Add(new SelectListItem() { Text = "Test1", Value = "1", Selected = false }); 
items.Add(new SelectListItem() { Text = "Test8", Value = "8", Selected = true }); 
items.Add(new SelectListItem() { Text = "Test3", Value = "3", Selected = false }); 
items.Add(new SelectListItem() { Text = "Test5", Value = "5", Selected = false }); 

SelectList sl = new SelectList(items, "Value", "Text", "8"); 

Si potrebbe anche voler controllare this SO thread che potrebbe essere utile.

Modifica: Ho appena visto il tuo commento, e non funziona perché non è abbastanza intelligente da sapere per cercare i campi Text e Value per impostazione predefinita. È possibile passare un tipo di oggetto e ti consente di associarlo definendo le proprietà da associare alle proprietà Text e Value.