Saltar al contenido

MVC5 Razor html.dropdownlistfor set seleccionado cuando el valor está en array

No dudes en compartir nuestro sitio y códigos en tus redes sociales, ayúdanos a hacer crecer esta comunidad.

Solución:

Desafortunadamente @Html.DropDownListFor() se comporta de forma un poco diferente a otros ayudantes al representar controles en un bucle. Esto se informó anteriormente como un problema en CodePlex (no estoy seguro si es un error o solo una limitación)

Hay 2 opciones para resolver esto y garantizar que se seleccione la opción correcta en función de la propiedad del modelo

Opción 1 (usando un EditorTemplate)

Crea una personalizada EditorTemplate para el tipo de la colección. Crea un parcial en /Views/Shared/EditorTemplates/AggregationLevelConfiguration.cshtml (tenga en cuenta que el nombre debe coincidir con el nombre del tipo

@model yourAssembly.AggregationLevelConfiguration
@Html.DropDownListFor(m => m.HelperCodeType, (SelectList)ViewData["CodeTypeItems"])
.... // other properties of AggregationLevelConfiguration

y luego en la vista principal, pase el SelectList al EditorTemplate como additionalViewData

@using (Html.BeginForm())
{
  ...
  @Html.EditorFor(m => m.Configurations , new  CodeTypeItems = Model.CodeTypeItems )
  ...

opcion 2 (generar un nuevo SelectList en cada iteración y establezca el selectedValue)

En esta opción tu propiedad CodeTypeItems debería ser IEnumerable, No un SelectList (o simplemente hacer codeTypes una propiedad pública). Luego en la vista principal

@Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, new SelectList(Model.CodeTypeItems, "Id", "Name", Model.Configurations[0].HelperCodeType)

Nota al margen: no es necesario utilizar new { id = "Configurations[0].HelperCodeType" – el DropDownListFor() método ya generado que id attribute

Puntuaciones y reseñas

Nos puedes añadir valor a nuestro contenido informacional contribuyendo tu experiencia en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *