2012-09-24 39 views
15

Me he pasado 8 horas más o menos tratando de resolver esto. He visto muchas soluciones pero no puedo obtener los mismos resultados. Tengo la corazonada de que tiene todo que ver con ser relativamente nuevo en ASP.Net.jQuery post array - ASP.Net MVC 4

Aquí está la última pregunta que traté de imitar sin suerte. https://stackoverflow.com/questions/10007722/post-array-as-json-to-mvc-controller#=

How to post an array of complex objects with JSON, jQuery to ASP.NET MVC Controller?

resumen básico del problema: que tienen una gran variedad de objetos JSON me gustaría transmitir al controlador. Cuando paso los datos que se muestran, digamos por ejemplo 3 elementos, pero sus valores no se pasan o simplemente muestra que no pasó nada. Firebug muestra que pasó, así que supongo que algo no está bien configurado y no le permite configurar esa variable correctamente en el lado C#.

he intentado un par de cosas y la lista de enfermos a continuación: Configuración 1: Traté burlarse de lo que he visto en el segundo enlace:

$.ajax({ 
     type: 'Post', 
     cache: false, 
     url: '/Workflow/Home/UpdateStepPositions', 
     data: { 'steps': ['1','2','3'] }, 
     async: false, 
     success: function (data) { 
      console.debug(data); 
     }, 
     error: function (data) { 
      console.debug(data); 
     } 
    }); 

Controller 
[HttpPost] 
    public ActionResult UpdateStepPositions(string[] steps){ 

     var bresults = new { 
      Success = false, 
      Message = "Unable to update step positions." 
     }; 

     return Json(bresults); 
    } 

ni siquiera podía conseguir que la sencilla configuración de trabajo. . Se pone a la función y muestra que no había nada pasó ....

Configuración 2:

list = new Array(); 
    list.push({ "step": 1, "position": 1 }); 
    list.push({ "step": 2, "position": 2 }); 
    list.push({ "step": 3, "position": 3 }); 

    $.ajax({ 
     type: 'Post', 
     cache: false, 
     url: '/Workflow/Home/UpdateStepPositions', 
     data: JSON.stringify({ 'steps': list }), 
     async: false, 
     success: function (data) { 
      console.debug(data); 
     }, 
     error: function (data) { 
      console.debug(data); 
     } 
    }); 

    Controller 
    [HttpPost] 
    public ActionResult UpdateStepPositions(List<UpdatedSteps> steps){ 
     var bresults = new { 
      Success = false, 
      Message = "Unable to update step positions." 
     }; 

     return Json(bresults); 
    } 

    Class 
    public class UpdatedSteps { 
    public string Step { get; set; } 
    public string Position { get; set; } 
} 

¿alguien puede brillar algo de luz sobre w ¿Me falta o me señala en la dirección correcta? ¡Con suerte es algo simple y solo un error de principiante!

+2

menos que sea absolutamente necesario, no deberían usar 'asíncrono: false' en una llamada ajax Se supone que AJAX es asincrónico, al apagarlo puede causar que el navegador no responda durante la llamada ajax. – MrOBrian

Respuesta

38

MVC detecta qué tipo de datos recibe por contentType. ejemplo que aquí se trabaja:

$(function() { 
    $.ajax({ 
     type: 'Post', 
     dataType: 'json', 
     url: '/Workflow/Home/UpdateStepPositions', 
     data: JSON.stringify({ steps: ['1', '2', '3'] }), 
     contentType: 'application/json; charset=utf-8', 
     async: false, 
     success: function (data) { 
      console.debug(data); 
     }, 
     error: function (data) { 
      console.debug(data); 
     } 
    }); 
}); 

Ahora todo está bien con la solicitud:

Content-Type:  application/json; charset=utf-8 
X-Requested-With: XMLHttpRequest 

y la respuesta:

Content-Type:  application/json; charset=utf-8 
+0

Intentaré esto e informaré. – Silent

+0

Ok, copié y pegué ese código y esto es lo que obtuve en el controlador, el mismo problema que he estado luchando la mayor parte del día. pasos = nulo – Silent

+0

@Austin Reynolds Disculpe, intente con una nueva solución. – webdeveloper