es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es la manera adecuada de establecer el valor de una lista de selección en un arreglo?

La mayoría de los ejemplos que he visto sobre cómo utilizar DropDownListFor muestran un modelo con un IEnumerable o una List de SelectListItem, y puedes establecer la propiedad Selected del elemento que deseas que se muestre inicialmente.

¿Cuál es la manera adecuada (o una manera adecuada) de hacer esto para un arreglo de menús desplegables? Supongo que podría hacer un IEnumerable<IEnumerable<SelectList>> para que cada menú desplegable tenga su propio IEnumerable<SelectList>> con el valor apropiado seleccionado, pero eso simplemente no parece correcto.

Creo que habría sido muy útil que el método DropDownListFor tuviera una sobrecarga que permitiera configurar un valor predeterminado. La mejor solución que se me ocurre en este momento es simplemente establecer el valor predeterminado para el elemento apropiado (y borrar el valor seleccionado para todos los demás) justo antes de llamar a DropDownListFor.

¿Pero seguramente hay una manera más adecuada de hacerlo? ¿O tal vez DropDownListFor simplemente no es adecuado para este trabajo y sería más fácil usar HTML directamente?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución para mostrar una matriz de menús desplegables con valores preseleccionados es utilizar la sintaxis de bucle for en la vista para iterar a través de la matriz y renderizar cada menú desplegable individualmente, estableciendo la propiedad Selected de los objetos SelectListItem para cada menú desplegable según sea necesario. Aquí hay un ejemplo:

    public class MyViewModel
    {
        public List<selectlistitem> DropdownValues { get; set; } = new List<selectlistitem>
        {
            new SelectListItem {Value = "value1", Text = "Opción 1"},
            new SelectListItem {Value = "value2", Text = "Opción 2"},
            new SelectListItem {Value = "value3", Text = "Opción 3"}
        };
    }
    
    public class MyController : Controller
    {
        public IActionResult MyAction()
        {
            var model = new MyViewModel();
            // establecer los valores seleccionados por defecto para cada menú desplegable
            model.DropdownValues[0].Selected = true;
            model.DropdownValues[1].Selected = true;
            model.DropdownValues[2].Selected = true;
            return View(model);
        }
    }
    

    Y en la vista:

    @model MyViewModel
    
    @for (int i = 0; i < Model.DropdownValues.Count; i++)
    {
        @Html.DropDownListFor(m => m.DropdownValues[i].Value, Model.DropdownValues, "-- Seleccionar --")
    }
    

    Este enfoque evita la necesidad de IEnumerables anidadas y le permite establecer los valores predeterminados de manera clara y legible. Sin embargo, requiere algún código adicional en el controlador para establecer los valores predeterminados antes de pasar el modelo a la vista. Si está trabajando con un gran número de menús desplegables o necesita establecer valores predeterminados dinámicamente según la entrada del usuario, entonces usar HTML directo con JavaScript puede ser una solución más apropiada.

Comments are closed.