通过jquery post将字符串数组传递给ASP.net

时间:2010-11-23 19:12:58

标签: c# asp.net jquery

我所拥有的是一个包含3个输入元素的表,它们代表顺序,名称,值。用户可以添加一个包含3个输入的新行,以根据需要添加这些数据集。

要完成动态添加输入,我使用jquery的克隆方法。

工作正常,我能够遍历每个并获取值,但我真正的痛苦是当用户输入所有数据时我想将数据传递给asp.net页面通过jQuery的post方法。我如何传递一个字符串数组,以便将这种格式发送到asp.net页面,当我完成它时,我如何解析asp.net端的数据。

所需数据格式:

[“名称|链接|订单”,“名称|链接|订单”,“名称|链接|订购”]

到目前为止

jquery代码:

$("#saveBtn").click(function (e) {

        e.preventDefault();

        $("#addPanel").slideUp(300);

        //Perform Save Operation
        var saveString = "";

        $("#addTable tbody>tr").each(function () {

            var o = $(this).find(".hsaorder").val();
            var n = $(this).find(".hsaname").val();
            var l = $(this).find(".hsalink").val();

            saveString += n + "|" + l + "|" + o ;


        });

        ////// Create Array here or some other method?


        $.post("/modules/H/Modify.aspx", { OBVIOUSLY SOMETHING GOES HERE});

        // Remove all but top table element to return to original state
        $("#addTable tbody>tr").not("#addTable tbody>tr:first").remove();


    });

4 个答案:

答案 0 :(得分:2)

Seth,这些连接像“|” +东西+“|”真的不是一个好习惯。我保证,尽量避免它,你会节省很多时间。

看看我是怎么做的:

首先,在客户端将所有内容都放到一个真正的JSON字符串中,如下所示:

    var saveAr = [];

    $("#addTable tbody>tr").each(function () {

        var o = $(this).find(".hsaorder").val();
        var n = $(this).find(".hsaname").val();
        var l = $(this).find(".hsalink").val();

        saveAr.push({ order: o, name: n, link: l });
    });

    $.post("/modules/H/Modify.aspx", { changes: JSON.stringify(saveAr)});

然后你需要以某种方式在服务器端解析它。最好这样做是安装JSON.Net DLL(只是谷歌),然后解析它:

var rows = JArray.Parse(Request["changes"]);
foreach (var row in rows) {
   var order = row.Value<string>["order"];
   var name = row.Value<string>["name"];
   var link = row.Value<string>["link"];

   // do something with it
}

在旧版IE中,您可能遇到JSON.stringify问题,但可以通过应用此修补程序修复它:https://github.com/douglascrockford/JSON-js

警告:我没有编译上面的代码,所以不要100%相信这一点,只是采取一个想法。

答案 1 :(得分:1)

    var saveArray = [];
    $("#addTable tbody>tr").each(function () {

        var o = $(this).find(".hsaorder").val();
        var n = $(this).find(".hsaname").val();
        var l = $(this).find(".hsalink").val();

        saveArray.push("|" + l + "|" + o);


    });

    var yourPost = {'save': saveArray.join(',')};
    $.post("/modules/H/Modify.aspx", yourPost, function(data){
       //your server response is in data;
    });

要在另一侧检索您的数据,请先用逗号分隔帖子,然后用管道分隔符拆分。 (当然,如果您希望数据中有逗号,请在连接中选择不同的分隔符。)

我不经常使用aspx,但这里我可能会去检索和拆分发布的数据。 (vb)要检索行中的“列”,只需使用管道分隔符执行相同的操作。

//how to retrieve and then split the rows out
Dim strData As String = Request.Post("save")
Dim separator() As Char = New Char() {","}
Dim rows() As String = strData.Split(separator)

For Each str As String In rows
    Response.Write(str)
Next

答案 2 :(得分:1)

如果你真的需要推广自己的格式而不只是序列化表单,你可以尝试这样的事情(从//Perform Save Operation开始替换你的代码):

var saveArray = $('#foo tr').map(function(i, e) {
  var result = [];
  result.push($(e).find('.hsaorder').val());
  result.push($(e).find('.hsaname').val());
  result.push($(e).find('.hsalink').val());
  return [result.join('|')];
}).get();

......然后:

$.post("/modules/H/Modify.aspx", { data: saveArray } );

然后解析并处理Modify.aspx中的数据。

答案 3 :(得分:0)

最小化编码的一种方法是使用json序列化数据并在asp.net页面反序列化它。您已经为您解析了数据。