我所拥有的是一个包含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();
});
答案 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页面反序列化它。您已经为您解析了数据。