2010-11-22 34 views
9

¡Sé que hay más hilos sobre esto pero no me ayudan y me estoy volviendo loco aquí!Pasar parámetros en una llamada jQuery ajax a un web.thod de ASP.NET

Quiero pasar algunos parámetros en un método web usando 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) { 

     } 
    }); 

En la llamada ajax, si pongo los datos a paramlist me sale el error: "no válida llamada de servicio web, valor que falta para el parámetro: \ u0027a \ u0027."

Si pongo los datos a jsonParams me sale el error:

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

Si escribo a cabo paramList, que está en un formato JSON correcta como {"id":"140", "id":"138"}

Si escribo a cabo jsonParams, está en una incorrecta formato como "{\"id\":\"140\",\"id\":\"138\"}"

El método web: (no hace mucho todavía ..)

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

¿Qué estoy haciendo mal? Parece que no puede hacer bien este JSON.

ACTUALIZACIÓN:

Después de un poco de ayuda desde la primera respuesta que ahora mando {"id":["138","140"]} en la petición AJAX.

El método web ahora toma una cadena llamada id como el parámetro en su lugar.

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

ahora consigo el nuevo error:

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

Respuesta

14

Sus nombres de los parámetros JSON deberán mismo con los nombres de C# Parámetro.

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

Si va a enviar número indeterminado de parámetros al servidor, es posible concat en el lado del cliente en un parámetro y luego se separan en el lado del servidor.

+0

Gracias, no lo sé. Ahora después de hacerlo var c = JSON.stringify ({"id": list}); Obtengo: {"id": ["138", "140"]} que se ve bien. Pero sé que recibo un nuevo error al hacer la solicitud de ajax: "Type \ u0027System.Array \ u0027 no se admite para la deserialización de una matriz". – larschanders

+0

No sabía que podemos usar el tipo de lista como tipo de datos C# con webmethod, gracias;) –

+0

Me alegro de que podamos ayudarnos unos a otros :) – larschanders

Cuestiones relacionadas