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

时间:2011-09-22 04:13:49

标签: asp.net jquery

我想将一个数组传递给一个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]
    public static bool save_Role(String jobRoleArray[])

3 个答案:

答案 0 :(得分:8)

您将传递一个数组:

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

        });

在您的网络方法中,您可以通过以下方式接收List<roleInfo>

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

}

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

答案 1 :(得分:4)

我已经实现了类似的东西,然后将数组传递给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
        });
    }

在代码隐藏页面(网络方法)

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

        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");
        }
    }

希望这有帮助

答案 2 :(得分:0)

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

JSON.stringify(<your array cames here>)

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

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