2010-06-30 43 views
21

Extiendo un Enum y, dado el siguiente código, selectListItems es una lista genérica de SelectListItems que tiene todos los valores correctos para mi Enum.Problema con ASP.Net MVC SelectList y List <SelectListItems>

El primer bucle Foreach funciona bien. Sin embargo, cuando creo la lista de selección real y paso en selectListItems, todos los valores se pierden. ¿Cómo puedo mantener esos valores intactos?

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, "Texto", "Valor"); Esto funciona. Aunque no estoy seguro de por qué no funciona sin eso. ¿Nadie? – Ted

Respuesta

50

necesita cambiar la línea donde se construye que le indiquen dónde buscar los valores. En su caso sería:

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

Sin embargo, esto no llevará el elemento seleccionado. En ese caso, necesitará averiguar qué elemento debe ser el seleccionado y pasar su valor a través del cuarto parámetro.

Aquí se muestra un ejemplo:

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

Es posible que también desee comprobar hacia fuera this SO thread que podría ser útil.

Editar: Acabo de ver su comentario, y no funciona porque no es lo suficientemente inteligente como para saber buscar los campos Text y Value de forma predeterminada. Puede pasarle un tipo de objetos y le da la capacidad de vincularse definiendo qué propiedades asignar a las propiedades Text y Value.

Cuestiones relacionadas