2008-10-21 15 views
15

tengo algo como lo siguiente en una aplicación ASP.NET MVC:IEnumerable <string> a SelectList, ningún valor se selecciona

IEnumerable<string> list = GetTheValues(); 
var selectList = new SelectList(list, "SelectedValue"); 

E incluso pensó que el valor seleccionado se define, no se está seleccionando en la vista . Tengo la sensación de que me estoy perdiendo algo aquí, ¡así que si alguien puede sacarme de encima mi miseria!

Sé que puedo usar un tipo anómalo para proporcionar la clave y el valor, pero prefiero no agregar el código adicional si no es necesario.

EDITAR: Este problema ha sido resuelto por ASP.NET MVC RTM.

+1

Ver mi DDL tutoriales http: // www. asp.net/mvc/tutorials/javascript/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc y http://blogs.msdn.com/b/ rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net-mvc.aspx – RickAndMSFT

Respuesta

14

Tal vez puedas probar:

IDictionary<string,string> list = GetTheValues(); 
var selectList = new SelectList(list, "Key", "Value", "SelectedValue"); 

SelectList (al menos en la vista previa 5) no es lo suficientemente inteligente como para ver que los elementos de IEnumerable son tipo de valor y por lo que debe elegir la opción tanto para el valor y el texto. En cambio, establece el valor de cada elemento en "nulo" o algo así. Es por eso que el valor seleccionado no tiene ningún efecto.

4

Tome un vistazo a esto: ASP.NET MVC SelectList selectedValue Gotcha

Esto es tan buena explicación de lo que está pasando como cualquier otro.

+1

FYI, el enlace está muerto; parece que el dominio ha expirado – CBono

+0

No responde su pregunta en absoluto –

14

si sólo está tratando de trazar un IEnumerable<string> a SelectList puede hacerlo en línea como esta:

new SelectList(MyIEnumerablesStrings.Select(x=>new KeyValuePair<string,string>(x,x)), "Key", "Value"); 
+3

En lugar de. Seleccione (...), puede .ToDictionary (...) –

2

probar este

ViewBag.Items = list.Select(x => new SelectListItem() 
           { 
            Text = x.ToString() 
           }); 
+1

Responda con alguna explicación –

Cuestiones relacionadas