用jms中的params object [] args调用PageMethod

时间:2011-06-06 20:45:09

标签: c# jquery ajax pagemethods

当页面方法有一个“params”参数类型(在C#中)时,有没有办法在jQuery中调用Page方法? 如果我一次指定一个参数,我可以整天使用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)

1 个答案:

答案 0 :(得分:3)

只需仔细检查您的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"
});

OR 如果您愿意,可以使用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"
});

如果您对构建这些参数的某些细节有困难,您可以查看我经常回访的great resource article from Encosia,以提醒自己使用Web服务和页面的基本知识使用jQuery的方法。它解释了一些奇怪的事情,包括回到页面的链接,它们讨论了为什么contentType编码很重要,以及为什么必须将完整的JSON字符串提供给data参数而不仅仅是JavaScript的信息对象