2010-10-15 4 views
12

public ActionResult DoSomething(string[] arr, bool someBool, int someInt) { }Envoyer tableau avec jQuery ajax param/charge

essayant d'appeler la méthode ci-dessus de jQuery:

var test = []; 
test.push('dog'); 
test.push('cat'); 

$container.load('MyController/DoSomething', 
       { 'arr[]': test, 'someBool': true, 'someInt': 1 }, 
       function(response, status, xhr) { 
        // ... 
       }); 

le paramater tableau est nulle, d'autres params sont très bien. Qu'est-ce que je fais mal?

outils de développement Chrome affiche les données de formulaire soumis comme

arr%5B%5D%5B%5D:dog 
arr%5B%5D%5B%5D:cat 
someBool:true 
someInt:1 

ne sais pas ce qui se passe là-bas, mais ne regarde pas le droit de me

Répondre

27

Si vous utilisez jquery 1.4 peut que vous deviez définir le paramètre traditional à true afin d'être compatible avec le format de classeur modèle par défaut dans ASP. NET MVC:

var test = []; 
test.push('dog'); 
test.push('cat'); 

$.ajax({ 
    url: 'MyController/DoSomething', 
    type: 'GET', 
    traditional: true, 
    data: { arr: test, someBool: true, someInt: 1 }, 
    success: function(result) { 
     $container.html(result); 
    } 
}); 

ou si vous préférez la méthode .load():

var data = { arr: test, someBool: true, someInt: 1 }; 
$container.load('MyController/DoSomething', $.param(data, true), 
    function(response, status, xhr) { 
    // ... 
}); 
+0

ouais c'est ça. J'ai déjà rencontré ce problème auparavant mais j'avais oublié jusqu'à ce que cette réponse me rappelle ma mémoire. – fearofawhackplanet

+1

Merci pour l'exemple utilisant 'load' au lieu de 'ajax'. –

+0

Le même problème se produit avec Java Struts2 et ce correctif est également bon pour Struts2 –

1

Tout supprimer []

{ 'arr': test, 'someBool': true, 'someInt': 1 }, 

valeurs Posté (vérification avec Firebug).

arr[]  dog 
arr[]  cat 
someBool true 
someInt  1 
+0

supprimer les crochets ne fait pas fonctionner , J'ai déjà essayé sans. Notez que la documentation de jQuery donne l'exemple avec des parenthèses, donc je suppose que c'est la bonne façon: '$ (" # objectID "). Load (" test.php ", {'choices []': [" Jon "," Susan "]});' – fearofawhackplanet

0

Même je faisais face erreur, dans le tableau en passant de la page HTML à la page ASPX. Mon exigence était de charger la page aspx dans une balise DIV de la page html. sur le chargement de la page je dois passer ces valeurs de tableau JS au chargement de la page aspx.

J'ai utilisé la méthode ci-dessous.

$('#<divTagID>').load("Targetpage.aspx",{"Arr":JSArrValues});

En cas Charg ASPX je peux accéder à ces valeurs:

string results = Response["Arr[]"];

Merci à la documentation API JQuery enter link description here et stackoverflow