c# - 从 jQuery 调用带有 params object[] args 的 PageMethod

标签 c# jquery ajax pagemethods

当页面方法具有“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/

相关文章:

c# - 在C#Parallel.ForEach中的线程上持久变量

c# - 理解 wsdl 服务的 java 类

javascript - 使用 AJAX 设置的值进行两种方式绑定(bind) - Observable 在设置控件的值时不会通知

javascript - 如何使用 PHP 和 Javascript 实现服务器推送/长轮询/comet

javascript - Kendo html 编辑器

c# - SaveAs方法配置为需要root路径,而路径 '~/Images/FleaMarket/uploadedImages/mitali2054/5.jpg'不是root路径

c# - 为什么有些 cookie 在域之前有一个 '.'?

jquery - AngularJS 1 - 创建一个带有可扩展标题和列的矩阵

javascript - 为什么我收到 "Uncaught TypeError: Cannot read property ' body' of undefined”?

jquery - 显示隐藏jquery的问题