从jQuery调用带有params对象[]参数的PageMethod

本文关键字:参数 PageMethod 对象 params jQuery 调用 | 更新日期: 2023-09-27 17:58:27

当页面方法具有"params"参数类型(在C#中)时,是否有方法在jQuery中调用页面方法?如果我一次指定一个参数,我可以整天使用jQuery调用Page Methods,但如果我将它们作为"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)

从jQuery调用带有params对象[]参数的PageMethod

只需仔细检查您的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使用web服务和页面方法的基本知识。它解释了一些奇怪的地方,包括指向页面的链接,这些页面讨论了contentType编码为什么很重要,以及为什么必须向data参数而不仅仅是JavaScript对象提供完整的JSON字符串的信息。