none
Pasar un array de la vista al controlador. RRS feed

  • Pregunta

  • Hola a todos , necesito ayuda, tengo una serie de checkbox en una vista, y con un array los he recorrido todos para ver cuales estaban seleccionados, y en el array he metido sus id. Pero ahora no se como pasar el array al controlador para guardar los cambios.

    Muchas gracias de antemano, un saludo.

    martes, 29 de mayo de 2012 11:34

Respuestas

  • @Carlos

    Si tienes los checkbox dentro de un formulario, no es necesario que hagas nada. Todo lo hacen html primero y ASP.NET MVC por tí...

    1. HTML porque la especificación de HTML deja bien claro que una checkbox desmarcada NO se envía al servidor. No es que se envíe false, o vacía. No, no se envia, como si no existiese. Si le das la vuelta a eso, puedes asegurar al 100% que todos los valores que recibes en el controlador, provienen de checkboxes marcadas.
    2. ASP.NET MVC porque es capaz de transformar esos datos a un IEnumerable<X> de forma automática, siempre y cuando todas las checkboxes tengan el mismo name:

    Dado este HTML:

    <input type="checkbox" value="1" name="ufo" />
    <input type="checkbox" value="2" name="ufo" />
    <input type="checkbox" value="3" name="ufo" />

    Si en el controlador declaras:

    public ActionResult Accion (IEnumerable<int> ufo)
    {
    }

    En "ufo" tendrás los valores marcados (p.ej. ufo será una colección de 2 elementos con valores 1 y 3 si se han marcado tan solo la primera y última check).

    Saludos

    PD: Recuerda: eso aplica tan solo si tienes un form!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    • Marcado como respuesta Carlos787 miércoles, 30 de mayo de 2012 12:07
    martes, 29 de mayo de 2012 11:50

Todas las respuestas

  • Hola,

    ¿y qué pruebas has hecho? ¿cómo montas ese array? ¿no crees que sería bueno que enseñaras lo que tienes hecho para así poder orientarte más?

    Haciendo una búsqueda en google he llegado a esto que parece que resuelve tu problema

    How can I post an array of string to ASP.NET MVC Controller without a form? (es la primera respuesta está la solución)

    En tu caso, la única diferencia sería que debes cambiar el parámetro de la acción

    List<string> values

    a

    List<int> values



    Atentamente, Sergio.

    Blog
    Twitter

    martes, 29 de mayo de 2012 11:42
  • @Carlos

    Si tienes los checkbox dentro de un formulario, no es necesario que hagas nada. Todo lo hacen html primero y ASP.NET MVC por tí...

    1. HTML porque la especificación de HTML deja bien claro que una checkbox desmarcada NO se envía al servidor. No es que se envíe false, o vacía. No, no se envia, como si no existiese. Si le das la vuelta a eso, puedes asegurar al 100% que todos los valores que recibes en el controlador, provienen de checkboxes marcadas.
    2. ASP.NET MVC porque es capaz de transformar esos datos a un IEnumerable<X> de forma automática, siempre y cuando todas las checkboxes tengan el mismo name:

    Dado este HTML:

    <input type="checkbox" value="1" name="ufo" />
    <input type="checkbox" value="2" name="ufo" />
    <input type="checkbox" value="3" name="ufo" />

    Si en el controlador declaras:

    public ActionResult Accion (IEnumerable<int> ufo)
    {
    }

    En "ufo" tendrás los valores marcados (p.ej. ufo será una colección de 2 elementos con valores 1 y 3 si se han marcado tan solo la primera y última check).

    Saludos

    PD: Recuerda: eso aplica tan solo si tienes un form!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    • Marcado como respuesta Carlos787 miércoles, 30 de mayo de 2012 12:07
    martes, 29 de mayo de 2012 11:50
  • Muchas gracias por tu restupesta Tomás, pero tengo otro inconveniente, este es mi checkbox:

    <td ><input type="checkbox" name="checkbox" id="Seleccion<%: item.IdAviso %>" value="0"

    onclick="javascript:casillaSeleccionada(<%: item.IdAviso %>);" ></td>

    y lo que necesito recoger es el id no el valor.

    El array lo he creado en una función que se ejecuta el guardar :

     function guardar() {
          
            var listaSeleccionados = new Array();
      
           var checkboxes = document.getElementById('formulario').checkbox;
            for (var x = 0; x < checkboxes.length; x++) {
              if (checkboxes[x].checked) {
            listaSeleccionados.push( (checkboxes[x].id).substr(9, 6));
            alert(listaSeleccionados[x]);
        }
             } 

    Por eso me gustaría pasar este array al controlador, alguna idea?

    Gracias de antemano.

    martes, 29 de mayo de 2012 12:19
  • Gracias Sergio.
    martes, 29 de mayo de 2012 12:30