2010-03-25 9 views
34

Estoy tratando de crear una matriz de cadenas en JavaScript y obtener los resultados en una lista de cadenas en el método de acción. A continuación se muestra mi aspecto de JavaScript. Estoy usando jQuery 1.4.2. El problema es que mi lista en el método de acción siempre muestra NULL. ¿Un conjunto de cadenas de JavaScript no correlacionará correctamente con una lista de cadenas en C#?AJAX Publicar el conjunto de cadenas de JavaScript en JsonResult como lista <string> ¿Siempre devuelve nulo?

var test = ['test1', 'test2']; 

    var parms = { 
     var1: 'some string',    
     var2: test 
    }; 

    $.ajax({ 
     type: "POST", 
     url: "/Test/JSONTestAction", 
     async: false, 
     data: parms, 
     dataType: "json", 
     success: function(data) { 

      // success 
     } 
    }); 

Entonces mi JsonResult tiene el siguiente aspecto:

public JsonResult JSONTestAction(string var1, List<string> var2) 
    { 
     // var2 is always NULL -- not good 

     return Json(new { test = "test" }); 
    } 

Respuesta

53

que enfrentan el mismo problema después de actualizar a jQuery 1.4.2. Puede encontrar la solución here (en la sección Ajax).

Agregando tradicional: verdadero en las opciones de Ajax debería funcionar.

$.ajax({ 
    type: "POST", 
    traditional: true, 
    url: "/Test/JSONTestAction", 
    async: false, 
    data: parms, 
    dataType: "json", 
    success: function(data) { 

     // success 
    } 
}); 
+0

Joder, he estado rascándose mi cabeza por hora sobre este. ¡Gracias! – Fabzter

+0

El enlace 'aquí' está roto. –

+0

Gracias @RyanGates, sinceramente, no puedo recordar ahora qué había en ese enlace. Creo que [esto] (http://api.jquery.com/jQuery.ajax/) puede ayudar ahora. – uvita

7

Este cambio fue para mejorar el comportamiento nativo de los usuarios de PHP/Rails, you can read about the params changes more here.

Puede activarlo por solicitud de esta manera:

$.ajax({ 
//Stuff... 
traditional:true 
}); 

o globalmente como esto (sólo tenga que ejecutar una vez antes de disparar cualquier solicitud):

jQuery.ajaxSettings.traditional = true; 
+0

solo FYI es en realidad: jQuery.ajaxSettings.traditional = true; – aherrick

+1

@aherrick - corregido :) –

+0

justo :) divertido porque en realidad volví a esta publicación como referencia sobre cómo hacer esto globalmente en un proyecto reciente. – aherrick

Cuestiones relacionadas