使用jquery ajax将数组传递给WebMethod在asp.net中不起作用

时间:2015-10-08 07:33:43

标签: jquery asp.net ajax webmethod

我正在尝试使用jquery ajax将所有gridview记录发送到webmethod,但它无法正常工作。这是我的代码

function Save() {
            var TableData = new Array();

            $('[id*=GridView1] tr').each(function (row, tr) {
                TableData[row] = {
                    "Sr"    : $(tr).find('td:eq(0)').text()
                  , "RollNo": $(tr).find('.RollNo').val()
                  , "Name"  : $(tr).find('.Name').val()
                  , "Marks" : $(tr).find('.Marks').val()
                }
            });
                        TableData.shift();
            $.ajax({
                type: "POST",
                url: "TestPage.aspx/SaveData",
                data: "{Data:'" + JSON.stringify(TableData) + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    alert(msg.d);
                }
            });
            return false;
        }

和Code Behind

  [WebMethod]    
    public static string SaveData(List<string> Data)
    {      
       //My Code
        return "Success";
    }

帮帮我们......

1 个答案:

答案 0 :(得分:3)

由于类型不匹配,必须抛出500 inetrnal server错误: -

 public static string SaveData(string Data)
    {      
       //My Code
        return "Success";
    }

您正在传递JSON字符串,因此您应该在服务器端期望它,然后将其反序列化为.Net对象。

<强>更新

您可以使用JavaScriptSerializer类: -

public static string SaveData(string Data)
{      
   JavaScriptSerializer json = new JavaScriptSerializer();
   List<GridData> mygridData = json.Deserialize<List<GridData>>(Data);
   return "Success";
}

您首先没有从客户端传递List<String>,而是传递带有属性的javascript对象。因此,要将其映射到.Net,您必须定义一个等效的Type: -

public class GridData
{
    public string Sr{ get; set; }
    public string RollNo{ get; set; }
    public string Name{ get; set; }
    public string Marks{ get; set; }        
}