2010-11-22 4 views
9

Je sais qu'il y a plus de discussions à ce sujet mais elles ne m'aident pas et je vais devenir fou ici!Passer des paramètres dans un appel jQuery ajax à une méthode Web ASP.NET

Je veux passer certains paramètres dans une méthode web en utilisant jQuery Ajax.

var paramList = ''; 
for(i = 0; i < IDList.length; i++){ 
    if (paramList.length > 0) paramList += ','; 
     paramList += '"' + 'id' + '":"' + IDList[i].value + '"'; 
    } 
    paramList = '{' + paramList + '}'; 
    var jsonParams = JSON.stringify(paramList); 


    $.ajax({ 
     type: "POST",   
     url: "editactivity.aspx/UpdateSequenceNumber",   
     data: jsonParams, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(response) { 

     } 
    }); 

Dans l'appel ajax, si je mets des données à ParamList je reçois l'erreur: "appel de service Web non valide, valeur manquante pour le paramètre: \ u0027a \ u0027."

Si je mets des données à jsonParams je reçois l'erreur:

"Cannot convert object of type \u0027System.String\u0027 to type \u0027System.Collections.Generic.IDictionary`2[System.String,System.Object]\u0027"

Si j'écrire paramList, il est dans un format JSON correct comme {"id":"140", "id":"138"}

Si j'écrire jsonParams, il est dans une mauvaise format comme "{\"id\":\"140\",\"id\":\"138\"}"

La méthode Web: (il ne le fait pas encore beaucoup ..)

[System.Web.Services.WebMethod] 
    public static string UpdateSequenceNumber(string a, string b) 
    { 
     return a+b; 
    } 

Qu'est-ce que je fais mal? Je n'arrive pas à obtenir cette chose JSON.

MISE À JOUR:

Après l'aide de la première réponse que je vais maintenant envoyer {"id":["138","140"]} dans la requête AJAX.

La méthode Web prend maintenant une chaîne appelée id comme paramètre à la place.

[System.Web.Services.WebMethod] 
public static string UpdateSequenceNumber(string id) 
{ 
    return id; 
} 

Maintenant je la nouvelle erreur:

"Type \u0027System.Array\u0027 is not supported for deserialization of an array."

Répondre

14

Vos noms de paramètres JSON doivent être de même avec les C# noms de paramter.

{"a":"140", "b":"138"} 

Si vous envoyez nombre inconnu de paramètres au serveur, vous pouvez concaténer à côté client en un seul paramètre, puis diviser à côté serveur.

+0

Merci, je ne le savais pas. Maintenant après je le fais var c = JSON.stringify ({"id": liste}); Je reçois: {"id": ["138", "140"]} ce qui semble correct. Mais sais que je reçois une nouvelle erreur lors de la requête ajax: "Type \ u0027System.Array \ u0027 n'est pas supporté pour la désérialisation d'un tableau." – larschanders

+0

Je ne savais pas que nous pouvions utiliser le type de liste comme type de données C# avec webmethod, merci;) –

+0

Heureux que nous puissions nous entraider :) – larschanders

Questions connexes