Передача параметров в ajax-вызове jQuery в веб-метод ASP.NET - PullRequest
10 голосов
/ 22 ноября 2010

Я знаю, что есть еще темы об этом, но они не помогают мне, и я схожу с ума здесь!

Я хочу передать некоторые параметры в веб-метод с использованием 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) {

        }
    });

При вызове ajax, если я помещаю данные в paramList, я получаю сообщение об ошибке: «Недопустимый вызов веб-службы, отсутствует значение параметра: \ u0027a \ u0027».

Если я помещаю данные в jsonParams, я получаю сообщение об ошибке:

"Невозможно преобразовать объект типа \ u0027System.String \ u0027 в тип \ U0027System.Collections.Generic.IDictionary`2 [System.String, System.Object] \ u0027"

Если я напишу paramList, он будет в правильном формате JSON, например {"id":"140", "id":"138"}

Если я выписываю jsonParams, это в неправильном формате, таком как "{\"id\":\"140\",\"id\":\"138\"}"

Веб-метод: (он пока не так уж много делает ..)

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

Что я делаю не так? Кажется, не могу понять эту вещь JSON правильно.

UPDATE:

После некоторой помощи из первого ответа я теперь отправляю {"id":["138","140"]} в запросе AJAX.

Веб-метод теперь принимает вместо этого строку с именем id.

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

Теперь я получаю новую ошибку:

"Type \ u0027System.Array \ u0027 не поддерживается для десериализации массив. "

1 Ответ

15 голосов
/ 22 ноября 2010

Ваши имена параметров json должны совпадать с именами параметров c #.

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

Если вы отправляете неизвестное количество параметров на сервер, вы можете объединить на стороне клиента в один параметр, а затем разделить нана стороне сервера.

...