【问题标题】:Passing Array to WebMethod using jquery ajax is not working in asp.net使用 jquery ajax 将数组传递给 WebMethod 在 asp.net 中不起作用
【发布时间】:2016-01-05 16:46:39
【问题描述】:

我正在尝试使用 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;
        }

和背后的代码

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

帮帮我....

【问题讨论】:

  • 控件是否命中webmethod??你调试了吗?
  • 有什么问题?我看到你有一个dataType: "json", 并且你没有返回一个 json 响应。所以我可以建议你删除它或将其更改为dataType: "text",
  • 我调试代码。它不是在调用 webmethod。
  • 还有为什么TableData.shift();
  • 嗨@Jai 我使用了dataType:“text”,但它仍然无法正常工作。表数据.shift();用于删除标题行。

标签: jquery asp.net ajax webmethod


【解决方案1】:

由于类型不匹配,那一定是抛出 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&lt;String&gt;,而是传递一个带有属性的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; }        
}

【讨论】:

  • 嗨@Rahul Singh。我想在服务器端接收一个数组。那么如何将其反序列化为 .Net 对象?
  • @ShaiwalTripathi - 这是一个在服务器端存储数据的类,我已经更新了。
猜你喜欢
  • 2011-05-13
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
相关资源
最近更新 更多