当页面方法具有“params”参数类型(在 C# 中)时,是否可以在 jQuery 中调用页面方法? 如果我一次指定一个参数,我可以整天使用 jQuery 调用页面方法,但如果我将它们作为“params object[] args”,它会抛出一个关于找不到“args”参数的错误。
我正在尝试调用具有以下签名的方法:
public static string MakeWebServiceCall(string methodName, params string[] args)
但只有当我像这样明确指定它时它才有效:
public static string MakeWebServiceCall(string methodName, string place, string type, string token)
最佳答案
只需仔细检查您的 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 库(较新的浏览器 native )对数据对象进行字符串化。此方法是我个人最喜欢的方法,因为我不必仔细检查是否正确构建了 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"
});
如果您对这些参数的构造方式的一些细节有困难,您可以查看此 great resource article from Encosia我经常回顾这些内容只是为了提醒自己使用 jQuery 使用 Web 服务和页面方法的基础知识。它解释了一些奇怪的地方,包括返回到讨论为什么 contentType 编码很重要的页面的链接,以及为什么必须向 data
参数提供完整的 JSON 字符串而不是只是一个 JavaScript 对象。
关于c# - 从 jQuery 调用带有 params object[] args 的 PageMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6257831/