2010-11-23 66 views
2

我擁有的是一個表,它包含3個輸入元素,它們表示順序,名稱,值。用戶可以添加一個新的3行輸入行,以便根據需要添加儘可能多的這些數據集。將字符串數組通過jQuery發佈到ASP.net

要完成輸入的動態添加,我使用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

您是否考慮並拒絕了JSON? – arootbeer 2010-11-23 19:38:50

+0

NOt根本就不熟悉在jQuery ajax中使用它,更重要的是在C#中使用它(.Net) – 2010-11-23 19:44:29

回答

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 
} 

您可能有問題的JSON。在老版本的IE瀏覽器中進行字符串化,但是可以通過應用此修補程序修復它:https://github.com/douglascrockford/JSON-js

警告:我沒有編譯上面的代碼,所以不要100%信任這個,只是想一想。

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 
0

最小化您的編碼的一個非常少數的方法是使用json序列化數據並將其反序列化爲我的asp.net頁面。您將擁有已經爲您解析的數據。

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中的數據。

+0

絕對是每個選項的不錯選擇。 – 2010-11-23 20:07:08

相關問題