вызов метода PageMethod с аргументами params object[] из jQuery

#c# #jquery #ajax #pagemethods

#c# #jquery #ajax #pagemethods

Вопрос:

Есть ли способ вызвать метод Page в jQuery, когда метод page имеет тип аргумента «params» (в C #)? Я могу вызывать методы страницы в течение всего дня, используя jQuery, если я указываю аргументы по одному за раз, но если я помещаю их как «аргументы params object[]», это выдает ошибку о том, что параметр «args» не найден.

Я пытаюсь вызвать метод со следующей подписью:

 public static string MakeWebServiceCall(string methodName, params string[] args)
  

Но это работает, только если я указываю это явно следующим образом:

 public static string MakeWebServiceCall(string methodName, string place, string type, string token)
  

Комментарии:

1. Как выглядит ваш jQuery (при вызове метода)?

2. Когда вы объявляете функцию, у которой есть params аргументы, это просто синтаксический сахар в C #, позволяющий вызывать ее с любым количеством аргументов, используя обычный синтаксис вызова функции. Однако за кулисами это действительно создает функцию, которая принимает массив аргументов. Вероятно, вам придется вызвать его, передав дополнительные аргументы в массиве (или эквивалент в javascript). Что-то вроде: MakeWebServiceCall("MyMethod", [place, type, token]);

Ответ №1:

Просто дважды проверьте свой JavaScript. Это, скорее всего, виновник, чем проблема с вашим C #, поскольку значение params зарезервированного слова не существует. Аргумент по-прежнему в конечном счете представляет собой массив строк, который не является чем-то особенным для JSON. Я только что создал быструю тестовую страницу, которая не привела к абсолютно никаким проблемам с использованием вашего метода. Попробуйте дважды проверить свой синтаксис на соответствие следующему:

 $.ajax({
  type: "POST",
  contentType: "application/json; charset=utf-8",
  url: "MyPage.aspx/MakeWebServiceCall",
  data: '{"methodName":"myMethod", "args":["my","array","of","strings"]}',
  dataType: "json"
});
  

ИЛИ, если хотите, создайте объект данных с помощью библиотеки JavasScript JSON (встроенной в более новые браузеры). Этот метод — мой личный фаворит, поскольку мне не придется перепроверять, правильно ли я построил свою строку JSON. Просто не забудьте включить устаревшую поддержку IE7, если вы настроены любезно:

 var data = {};
data.methodName = "myMethod";
data.args = ["my","array","of","strings"];

$.ajax({
  type: "POST",
  contentType: "application/json; charset=utf-8",
  url: "MyPage.aspx/MakeWebServiceCall",
  data: JSON.stringify(data),
  dataType: "json"
});
  

Если у вас возникли трудности с некоторыми деталями того, как создаются эти аргументы, вы можете ознакомиться с этой замечательной ресурсной статьей от Encosia, к которой я часто возвращаюсь, просто чтобы напомнить себе об основах использования веб-сервисов и методов страниц с помощью jQuery. Это объясняет пару странностей, включая ссылки на страницы, в которых рассказывается о том, почему важна кодировка ContentType, а также информация о том, почему data аргументу должна быть предоставлена полная строка JSON, а не просто объект JavaScript.