2011-04-28 9 views
5

Tengo un problema con los menús desplegables y la viewbag. Estoy configurando un menú desplegable usando el siguiente código en mi controlador:MVC 3 Lista desplegable que pierde el valor seleccionado con ViewBag

 applicationGuid = new Guid(form["applicationList"]); 

     var applications = _applicationRepository.List(); 

     ViewBag.applicationList = new SelectList(applications, "Id", "Name", applicationGuid); 

y en la vista, esto funciona perfectamente y devuelve el valor previamente seleccionado (applicationGuid):

@Html.DropDownList("applicationList", "") 

Ahora quiero usar el siguiente código como quiero añadir algunos atributos de la lista desplegable:

@Html.DropDownList("applicationList", ViewBag.applicationList as SelectList, "", new { rel = "0", @class = "required" }) 

pero por alguna razón, el valor seleccionado no se ha visualizado (a pesar de que se pasa a la vista y que puede sE e selected = "true" contra el elemento correcto en ViewBag SelectList).

Los dos ejemplos anteriores hacen que (éste tiene la selected = "selected"):

<select id="applicationList" name="applicationList"><option value=""></option><option selected="selected" value="2f666645-9b28-406f-bd9f-9ecc009346a6">app1</option><option value="898cbbb5-5dff-4378-b15a-9ecc00b8242f">app2</option></select> 

y como tal (seleccionado se ha ido !!):

<select class="required" id="applicationList" name="applicationList" rel="0"><option value=""></option><option value="2f666645-9b28-406f-bd9f-9ecc009346a6">app1</option><option value="898cbbb5-5dff-4378-b15a-9ecc00b8242f">app2</option></select> 

¿Puede alguien explicar ¿Qué estoy haciendo mal aquí y por qué está perdiendo el valor seleccionado? He encontrado una serie de publicaciones que explican cómo los nombres de los elementos de datos de las vistas no pueden entrar en conflicto, etc., pero lo he eliminado con nombres aleatorios y ¡nada parece funcionar! ¿Es esto un problema en MVC3?

Respuesta

14

El problema parece ser que cuando pasa el SelectList como parámetro a Html.DropDownList(), no le gusta que tenga el mismo nombre que la lista desplegable real.

He copiado su código y he encontrado el mismo problema que usted.

Pero tan pronto como he cambiado

@Html.DropDownList("applicationList", ViewBag.applicationList as SelectList, "", new { rel = "0", @class = "required" }) 

a

@Html.DropDownList("applicationListX", ViewBag.applicationList as SelectList, "", new { rel = "0", @class = "required" }) 

Se produce la salida de trabajo:

<select class="required" id="applicationListX" name="applicationListX" rel="0"><option value=""></option> 
<option selected="selected" value="2f666645-9b28-406f-bd9f-9ecc009346a6">app1</option> 
<option value="898cbbb5-5dff-4378-b15a-9ecc00b8242f">app2</option> 
</select> 

No sé por qué ese es el caso, pero hay su solución.

+0

Gracias por la respuesta Carson. Ya lo he intentado y no funcionó para mí. Lo intenté de nuevo y sigue siendo el mismo producto. No estoy seguro de lo que estoy haciendo diferente a usted. – user728848

+0

Olvídalo ... ¡esto funciona! Cuando cambié el nombre me olvidé de cambiar un poco de código que hizo esto: if (form ["applicationListX"]! = "" && form ["applicationListX"]! = Null) applicationGuid = new Guid (form ["applicationListX] "]); ¡así que estaba perdiendo mi valor! Gracias por tu ayuda. – user728848

+0

¡Muchas gracias! Funciona ahora sin defectos. Declararía que esto es un error ... – dampee

Cuestiones relacionadas