2010-03-03 39 views
7

Estoy tratando de establecer los valores seleccionados para una MultiSelectList pero la página no muestra ningún valor como seleccionado. He intentado todas las formas prácticas de hacer esto y aún obtener los mismos resultados. Actualmente estoy tratando de pasar una lista de objetos seleccionados a través del constructor. Lo que me atrapa es que cuando inspecciono el objeto MultiSelectList, la propiedad selectedvalues ​​contiene los elementos que he pasado a él usando el constructor, pero todavía no se muestra..NET MVC MultiSelectList y valores seleccionados

He notado que muchas personas tienen el mismo problema pero no he visto una respuesta que me haya funcionado. He intentado iterar a través de la lista y establecer la propiedad seleccionada en verdadero, he intentado crear la lista de selección múltiple desde cero y establecer cada elemento individual de la propiedad seleccionada y he intentado usar el constructor. Ninguno de estos ha funcionado. También encontré una sugerencia de que la propiedad MultiSelectList no se podía nombrar igual que el control (que probé) y que no funcionó. Srsly, ¿por qué es tan difícil crear una lista desplegable con los valores seleccionados utilizando este marco? ¿Me estoy perdiendo de algo?

Unidos de Práctica:
<% = Html.ListBox ("StatesOfPractice", Model.StatesOfPracticeList)%>
<% = Html.ValidationMessage ("StatesOfPractice")%>

editar # 1

Parece que está sucediendo cuando instalo la MultiSelectList. Si inspecciono el objeto en la Vista y abro la Vista de resultados, puedo ver que "Alaska" no está seleccionado cuando sé que debería ser.

http://imgur.com/eTIdH.jpg

estoy crear instancias de esta manera.

new MultiSelectList (Lista, "Código", "Descripción", Lista);

GenericDataContract es simplemente una clase con dos propiedades, Código y Descripción. La primera lista es todos los estados, la segunda lista son mis estados seleccionados.

Respuesta

1

Creo que saca los elementos seleccionados del modelo, no de la lista de elementos. Asegúrese de que su propiedad de modelo StatesOfPractice esté llena con los elementos que desea seleccionar. Es decir, la propiedad de modelo StatesOfPracticeList proporciona el conjunto de elementos utilizados para completar la lista. La propiedad del modelo StatesOfPractice que será el conjunto de valores de propiedad seleccionados cuando se publique el formulario, también debe contener los valores seleccionados por defecto cuando se representa la vista. Debajo del capó utiliza el método HtmlHelper GetModelStateValue para encontrar los valores seleccionados para cualquier lista de selección. Supongo que esto se hace para que sea más simple mantener los valores seleccionados cuando hay un error de validación y el formulario se reintegra con los errores de estado del modelo.

+0

Comentarios movidos - ver ediciones para publicar – jamesamuir

8

Grrrrrr, lo encontré. Aparentemente, los elementos seleccionados solo pueden ser una lista de cadenas. Una vez que modifiqué mi código para pasar esto, seleccionó los valores.

tvanfosson - gracias por la ayuda y la respuesta rápida. ¡apreciado enormemente!

+0

He estado luchando con esto durante más de una hora hasta que encuentre su pregunta. Supongo que esto no puede ser el comportamiento previsto. ¿Qué tan difícil podría ser arreglarlo? – Bardo

3

Bien, este realmente me confundió, pero creo que lo tengo resuelto.

El problema que tenía conseguir el MultiSelectList para mostrar con valores predeterminados seleccionados fue que yo estaba usando @Html.DropDownListFor(...) para mostrar la lista de selección múltiple en lugar de @Html.ListBoxFor(...). Confusamente, DropDownListFormostrará una lista de selección múltiple si especifica los atributos de HTML para obligarlo a hacerlo, pero los valores por defecto voluntad no trabajo, ya que sólo está destinado a tener un defecto - Lo siguiente por lo tanto no han cualquier predeterminado seleccionado:

List<string> myStrings; 
myStrings = new List<string>(); 
myStrings.Add("aaa"); 
myStrings.Add("bbb"); 
myStrings.Add("ccc"); 

ViewData["MyStringsDropdown"] = new MultiSelectList(
    myStrings.Select(abc => new { StringId = abc, Title = abc + "Title" }), 
    "StringId", 
    "Title", 
    myStrings.Where(str => str == "aaa" || str == "ccc").ToList() 
); 

... 

@Html.DropDownListFor(model => model.MyStrings, (MultiSelectList)ViewData["MyStringsDropdown"], new { size = "10", multiple = "multiple" }) 

Sin embargo, la siguiente se mostrar los valores predeterminados de "AAA" y "ccc" como seleccionado:

@Html.ListBoxFor(model => model.MyStrings, (MultiSelectList)ViewData["MyStringsDropdown"], new { size = "10", multiple = "multiple" }) 

Pero aquí está el verdadero pateador; ASP.NET a veces parece caché el tipo de control, por lo que puede reemplazar DropDownListFor con ListBoxFor y aún no preseleccionará ninguno de los valores predeterminados hasta que reinicie el proceso de trabajo de IIS. Encuentro eso realmente extraño, y me lanzó por un tiempo.

Cuestiones relacionadas