通过ajax将jquery中的数组传递给ac#webmethod

我想将一个数组传递给ac#webmethod,但没有一个很好的例子可以遵循。 谢谢你的帮助。

这是我到目前为止:

我的arrays:

$(".jobRole").each(function (index) { var jobRoleIndex = index; var jobRoleID = $(this).attr('id'); var jobRoleName = $(this).text(); var roleInfo = { "roleIndex": jobRoleIndex, "roleID": jobRoleID, "roleName": jobRoleName }; queryStr = { "roleInfo": roleInfo }; jobRoleArray.push(queryStr); }); 

我的ajax代码

  $.ajax({ type: "POST", url: "WebPage.aspx/save_Role", data: jobRoleArray, contentType: "application/json; charset=utf-8", dataType: "json", async: false, success: function (data) { alert("successfully posted data"); }, error: function (data) { alert("failed posted data"); alert(postData); } }); 

在网络方法上不确定,但这是我在想的:

 [WebMethod] public static bool save_Role(String jobRoleArray[]) 

你将传递一个数组:

 [ "roleInfo": { "roleIndex": jobRoleIndex, "roleID": jobRoleID, "roleName": jobRoleName }, "roleInfo": { "roleIndex": jobRoleIndex, "roleID": jobRoleID, "roleName": jobRoleName }, ... ] 

在我看来,如果你有一个匹配该结构的类会更容易,如下所示:

 public class roleInfo { public int roleIndex{get;set;} public int roleID{get;set;} public string roleName{get;set;} } 

因此,当您从jQuery调用Web方法时,您可以这样做:

  $.ajax({ type: "POST", url: "WebPage.aspx/save_Role", data: "{'jobRoleArray':"+JSON.stringify(jobRoleArray)+"}", contentType: "application/json; charset=utf-8", dataType: "json", async: false, success: function (data) { alert("successfully posted data"); }, error: function (data) { alert("failed posted data"); alert(postData); } }); 

在您的Web方法中,您可以通过以下方式接收List

 [WebMethod] public static bool save_Role(List jobRoleArray) { } 

如果你试试这个,请告诉我。 以上代码没有以任何方式进行测试,因此可能存在错误,但我认为这是一种很好且非常干净的方法。

我已经实现了类似的东西,然后将数组传递给web方法。 希望这能为您解决问题提供一些想法。 我的javascript代码如下: –

  function PostAccountLists() { var accountLists = new Array(); $("#participantLists input[id*='chkPresents']:checked").each(function () { accountLists.push($(this).val()); }); var instanceId = $('#<%= hfInstanceId.ClientID %>').val(); $.ajax({ type: "POST", url: "/_layouts/TrainingAdministration/SubscriberLists.aspx/SignOff", data: "{'participantLists': '" + accountLists + "', insId : '" + instanceId + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { AjaxSucceeded(msg); }, error: AjaxFailed }); } 

在代码隐藏页面(Web方法)

  [WebMethod] public static void SignOff(object participantLists, string insId) { //subscription row id's string[] a = participantLists.ToString().Split(','); List subIds = a.Select(x => int.Parse(x)).ToList(); int instanceId = Convert.ToInt32(insId); 

这里要注意的是在web方法中,从ajax调用接收数组的参数是object类型。

希望这可以帮助。

编辑: – 根据您的Web方法,您期望值类型为boolean。 这里是如何在ajax调用成功时获取它

  function AjaxSucceeded(result) { var res = result.d; if (res != null && res === true) { alert("succesfully posted data"); } } 

希望这可以帮助

为MdeVera添加这个,寻找干净的方式发送数组作为参数。 你可以在伊卡洛斯的答案中找到答案。 我只想说清楚:

 JSON.stringify() 

例如,如果要调用带有数组作为参数的网页,可以使用以下方法:

 "?=" + JSON.stringify()