35 votes

AJAX Post of JavaScript String Array to JsonResult as List <string> Renvoie toujours Null?

J'essaie de créer un tableau de chaînes en JavaScript et d'obtenir les résultats dans une liste de chaînes dans la méthode d'action. Voici à quoi ressemble mon JavaScript. J'utilise jQuery 1.4.2. Le problème est que ma liste dans la méthode d'action affiche toujours NULL. Un tableau de chaînes JavaScript ne correspond-il pas correctement à une liste de chaînes en C #?

     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
        }
    });
 

Ensuite, mon JsonResult ressemble à ceci:

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

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

55voto

uvita Points 3519

J'ai rencontré le même problème après la mise à jour vers jquery 1.4.2. Vous pouvez trouver la solution ici (dans la section Ajax).

L'ajout de traditional: true dans les options ajax devrait fonctionner.

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

        // success
    }
});
 

7voto

Nick Craver Points 313913

Cette modification visait à améliorer le comportement natif pour les utilisateurs de PHP / Rails, vous pouvez en savoir plus sur les modifications des paramètres ici .

Vous pouvez l'activer par demande comme ceci:

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

Ou globalement comme ceci (il suffit de l'exécuter une seule fois avant de lancer des requêtes):

 jQuery.ajaxSettings.traditional = true;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X