Saltar al contenido

Pasar una lista de objetos a un método de controlador MVC usando jQuery Ajax

Puede que se de el caso de que encuentres algún problema en tu código o proyecto, recuerda probar siempre en un entorno de testing antes aplicar el código al proyecto final.

Solución:

Usando la sugerencia de NickW, pude hacer que esto funcionara usando things = JSON.stringify( 'things': things ); Aquí está el código completo.

$(document).ready(function () 
    var things = [
         id: 1, color: 'yellow' ,
         id: 2, color: 'blue' ,
         id: 3, color: 'red' 
    ];      

    things = JSON.stringify( 'things': things );

    $.ajax(
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        type: 'POST',
        url: '/Home/PassThings',
        data: things,
        success: function ()           
            $('#result').html('"PassThings()" successfully called.');
        ,
        failure: function (response)           
            $('#result').html(response);
        
    ); 
);


public void PassThings(List things)

    var t = things;


public class Thing

    public int Id  get; set; 
    public string Color  get; set; 

Hay dos cosas que aprendí de esto:

  1. Las configuraciones contentType y dataType son absolutamente necesarias en la función ajax(). No funcionará si faltan. Descubrí esto después de mucho ensayo y error.

  2. pasar en un array de objetos a un método de controlador MVC, simplemente use el formato JSON.stringify( ‘cosas’: cosas ).

¡Espero que esto ayude a alguien más!

¿No podrías simplemente hacer esto?

var things = [
     id: 1, color: 'yellow' ,
     id: 2, color: 'blue' ,
     id: 3, color: 'red' 
];
$.post('@Url.Action("PassThings")',  things: things ,
   function () 
        $('#result').html('"PassThings()" successfully called.');
   );

…y marca tu acción con

[HttpPost]
public void PassThings(IEnumerable things)

    // do stuff with things here...

Formatear sus datos que puede ser el problema. Prueba cualquiera de estos:

data: ' "things":' + JSON.stringify(things) + '',

O (de ¿Cómo puedo publicar un array de string al controlador ASP.NET MVC sin un formulario?)

var postData =  things: things ;
...
data = postData

Recuerda comunicar esta noticia si te fue de ayuda.

¡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 *