#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.