通过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()