none
Enviar array long a Controller con $.ajax RRS feed

  • Pregunta

  • Estimados,

    Hace días debo enviar un array de long a un controlador y nunca llega, siempre mi variable en el controlador en nula.

    El codigo en el controlador es el siguiente:

    [HttpPost]
    public JsonResult GetRegionesDePaises(long[] paises)
    {
    }
    


    Lla llamada ajax es la siguiente:

    $.ajax({
        url: '/Incident/GetRegionesDePaises/',
        datatType: 'json',
        data: JSON.stringify( @Model.SelectedCountryID),
        cache: false,
        type: 'POST',
        success: function (data) {
                          alert(data);
                 },
        error: function (xhr, ajaxOptions, thrownError) {
                showError(xhr.status, xhr.responseText);
     }
    });

    Donde: 

    @Model.SelectedCountryID

    está definido de la siguiente forma:

            [Display(Name = "Paises")]
            public long[] SelectedCountryID { get; set; }

    Sin embargo, en el controlador al servidor siempre llega null.

    ¿Alguien puede ayudarme!?

    martes, 14 de julio de 2015 14:22

Respuestas

  • Buenas!

    Tu problema, seguramente, es que usas dataType para indicar que envias un json, pero dataType no se usa para eso. El uso de dataType es para indicarle a jQuery el tipo de respuesta del servidor, no lo que se envía. Debes usar contentType:

    var uri = '...';
    var arr = [4,8,15,16,23,42];
    $.ajax({
        url: uri,
        data: JSON.stringify(arr),
        type: 'POST',
        contentType: 'application/json'
    });

    Con esto te debería de funcionar.

    Saludos!

    PD: He creado un post en mi blog al respecto: http://geeks.ms/blogs/etomas/archive/2015/07/15/enviar-un-array-js-a-un-controlador-mvc5.aspx


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

    miércoles, 15 de julio de 2015 13:52

Todas las respuestas

  • hola

    no creo que sea correcto aplicar un stringify() a una variable del modelo

    deberias armar el objeto usando

    var datos = new Array();
    
    @foreach(long item in @Model.SelectedCountryID)
    {
    	datos.Push('@item');
    }
    
    $.ajax({
        url: '/Incident/GetRegionesDePaises/',
        datatType: 'json',
        data: JSON.stringify(datos),
        cache: false,
        type: 'POST',
        success: function (data) {
                          alert(data);
                 },
        error: function (xhr, ajaxOptions, thrownError) {
                showError(xhr.status, xhr.responseText);
     }
    });

    como veras iteras usando codigo servidor para ir añadiendo a la variable del lado del cliente

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 14 de julio de 2015 14:53
  • Estimado Leandro,

    Probe la solución que me ofreció y no obtuve resultados.

    Intente probar algo más básico como esto:

    var datos = new Array(4, 5);
    
                                                $.ajax({
                                                    url: '/Incident/GetRegionesDePaises/',
                                                    datatType: 'json',
                                                    data: JSON.stringify( datos),
                                                    cache: false,
                                                    type: 'POST',
                                                    success: function (data) {
                                                        alert(data);
                                                    },
                                                    error: function (xhr, ajaxOptions, thrownError) {
                                                        showError(xhr.status, xhr.responseText);
                                                    }
                                                });
    

    pero tampoco me llega el array al servidor. De hecho intente cambiar el array de long por string y tampoco llega.

    No hay forma de enviar un array al servidor. ¿Que estoy colocando mal??

    martes, 14 de julio de 2015 15:49
  • hola

    es que no creo que el array se defina de esa forma, intenta usando

    var params = new Object();
    
    var datos = new Array();
    datos.Push(4);
    datos.Push(5);
    
    params.paises = datos;

    entonces usa en el stringify() la variable "params"

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    martes, 14 de julio de 2015 16:14
  • Estimado Leandro,

    Probe la solución que me ofreció y no obtuve resultados.

    Intente probar algo más básico como esto:

    var datos = new Array(4, 5);
    
                                                $.ajax({
                                                    url: '/Incident/GetRegionesDePaises/',
                                                    datatType: 'json',
                                                    data: JSON.stringify( datos),
                                                    cache: false,
                                                    type: 'POST',
                                                    success: function (data) {
                                                        alert(data);
                                                    },
                                                    error: function (xhr, ajaxOptions, thrownError) {
                                                        showError(xhr.status, xhr.responseText);
                                                    }
                                                });

    pero tampoco me llega el array al servidor. De hecho intente cambiar el array de long por string y tampoco llega.

    No hay forma de enviar un array al servidor. ¿Que estoy colocando mal??

    probando lo siguente?

    data: JSON.stringify({ paises: datos }),
       


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 14 de julio de 2015 16:39
    Moderador
  • también probaría definiendo el array así

    var datos = [];
    datos[0] = 4;
    datos[1] = 5;


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 14 de julio de 2015 16:40
    Moderador
  • Buenas!

    Tu problema, seguramente, es que usas dataType para indicar que envias un json, pero dataType no se usa para eso. El uso de dataType es para indicarle a jQuery el tipo de respuesta del servidor, no lo que se envía. Debes usar contentType:

    var uri = '...';
    var arr = [4,8,15,16,23,42];
    $.ajax({
        url: uri,
        data: JSON.stringify(arr),
        type: 'POST',
        contentType: 'application/json'
    });

    Con esto te debería de funcionar.

    Saludos!

    PD: He creado un post en mi blog al respecto: http://geeks.ms/blogs/etomas/archive/2015/07/15/enviar-un-array-js-a-un-controlador-mvc5.aspx


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

    miércoles, 15 de julio de 2015 13:52