Asp.net 通过ajax将jquery中的数组传递给c#webmethod

Asp.net 通过ajax将jquery中的数组传递给c#webmethod,asp.net,jquery,Asp.net,Jquery,我想将数组传递给c#webmethod,但没有一个好的示例。谢谢你的帮助 以下是我到目前为止的情况: 我的阵列: $(".jobRole").each(function (index) { var jobRoleIndex = index; var jobRoleID = $(this).attr('id'); var jobRoleName = $(this).text(); var roleInfo = { "roleIndex": job

我想将数组传递给c#webmethod,但没有一个好的示例。谢谢你的帮助

以下是我到目前为止的情况:

我的阵列:

$(".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,但以下是我的想法:

[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;}
}
 $.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);
            }

        });
因此,当您从jQuery调用web方法时,可以这样做:

public class roleInfo
{
     public int roleIndex{get;set;}    
     public int roleID{get;set;}
     public string roleName{get;set;}
}
 $.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方法中,您可以通过以下方式接收
列表

[WebMethod]
public static bool save_Role(List<roleInfo> jobRoleArray)
{

}
[WebMethod]
公共静态布尔保存_角色(列表JobRolArray)
{
}

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

我以前实现过类似的方法,即将数组传递给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
        });
    }

希望这有助于

为像MdeVera这样寻找干净的方式将数组作为参数发送的人添加这一功能。你可以在伊卡洛斯的答案中找到答案。我只是想说清楚:

JSON.stringify(<your array cames here>)
JSON.stringify()
例如,如果要调用以数组作为参数的网页,可以使用以下方法:

"<URL>?<Parameter name>=" + JSON.stringify(<your array>)
“?=”+JSON.stringify()

这似乎可行,但当我执行类似于JobRolArray[0].Index或JobRolArray[0].RoleID或JobRolArray[0].RoleName的操作时,我在webmethod中看不到任何数据。在进行ajax调用时,您是否检查了数据是否存在?是否完成了更多webmethod?我似乎根本看不到任何数据。但是,调用了该方法,我已经尝试了您提供的示例。只是似乎无法把数据拿出来。谢谢你的帮助。谢谢你,阿加曼德,但我现在需要对我的对象进行反序列化,但似乎无法将数据完全导出。下面是您的示例:string[]a=participantLists.ToString().Split(',');List subid=a.Select(x=>int.Parse(x)).ToList();但是,如何单独查看每个元素呢?非常感谢你的帮助。