2009-08-20 82 views
1

我使用tableDnD重新排序表中的行,然後用它們序列「$ .tableDnD.serialize()」C#(.NET)處理JavaScript數組/序列化

我想給這對C#進行處理,這樣做的最好方法是什麼?

下面是序列化

pages[]=&pages[]=21&pages[]=23&pages[]=34&pages[]=37&pages[]=40&pages[]=43&pages[]=46&pages[]=49&pages[]=31&pages[]=50&pages[]=51&pages[]=52&pages[]=53&pages[]=54&pages[]=55&pages[]=56&pages[]=57&pages[]=58&pages[]=61&pages[]=65&pages[]=70&pages[]=74&pages[]=77&pages[]=78&pages[]=79&pages[]=82&pages[]=85&pages[]=88&pages[]=91&pages[]=94&pages[]=97&pages[]=100&pages[]=103&pages[]=106&pages[]=109&pages[]=112&pages[]=115&pages[]=119&pages[]=122&pages[]=123 

重要信息 我標記這是MVC卻忘了提到它的一個例子。我正在使用ASP.NET MVC

回答

2

您可以使用jQuery的ajax方法之一按原樣發送。我寧願把它發送到服務器之前,把它變成一個更小的,整潔的CSV字符串如下:基於對karim79的例子

var str = 'pages[]=&pages[]=21&pages[]=23&pages[]=34&pages[]=37&pages[]=40&pages[]=43&pages[]=46&pages[]=49&pages[]=31&pages[]=50&pages[]=51&pages[]=52&pages[]=53&pages[]=54&pages[]=55&pages[]=56&pages[]=57&pages[]=58&pages[]=61&pages[]=65&pages[]=70&pages[]=74&pages[]=77&pages[]=78&pages[]=79&pages[]=82&pages[]=85&pages[]=88&pages[]=91&pages[]=94&pages[]=97&pages[]=100&pages[]=103&pages[]=106&pages[]=109&pages[]=112&pages[]=115&pages[]=119&pages[]=122&pages[]=123'; 

var tmpArr = str.split('&'); 
var pagesArr = []; 
for(var i = 0;i < tmpArr.length; i++) { 
    var paramArr = tmpArr[i].split('='); 
    if(paramArr[1] != null && paramArr[1] != '') { 
     pagesArr.push(paramArr[1]); 
    } 
} 
alert(pagesArr); //now much prettier 

//turn it into a CSV string 
var pagesCsv = pagesArr.join(','); 

$.ajax({ 
    type: "POST", 
    url: "some.aspx", 
    data: pagesCsv, 
    success: function(msg){ 
    alert("Data Saved: " + msg); 
    } 
}); 
+0

我只是張貼,我可以接受這個字符串在C#中,我不知道是如果有一種將它解釋爲c#中的數組的方式,就像你可以在PHP中做的那樣,例如http://www.isocra.com/articles/ajaxTest_php.html – Tablet 2009-08-20 13:49:26

+1

@Shahin - 我不確定,因爲我不是ASP .NET的傢伙,但你可以發送該字符串到服務器,然後將其轉換爲一個數組,通過分割它在逗號',' – karim79 2009-08-20 13:53:22

0

var str = 'pages[]=&pages[]=21&pages[]=23&pages[]=34&pages[]=37&pages[]=40&pages[]=43&pages[]=46&pages[]=49&pages[]=31&pages[]=50&pages[]=51&pages[]=52&pages[]=53&pages[]=54&pages[]=55&pages[]=56&pages[]=57&pages[]=58&pages[]=61&pages[]=65&pages[]=70&pages[]=74&pages[]=77&pages[]=78&pages[]=79&pages[]=82&pages[]=85&pages[]=88&pages[]=91&pages[]=94&pages[]=97&pages[]=100&pages[]=103&pages[]=106&pages[]=109&pages[]=112&pages[]=115&pages[]=119&pages[]=122&pages[]=123'; 

var pos = null; 
var index = 0; 

while ((pos=str.indexOf("[]"))>-1) 
{ 
    str = str.substr(0, pos-1) + "_" + (index) + str.substr(pos+2); 
    index++; 
} 

alert(str); 


$.ajax({ 
    type: "POST", 
    url: "some.aspx", 
    data: str, 
    success: function(msg){ 
    alert("Data Saved: " + msg); 
    } 
}); 

在C#

 string[] keys = Request.QueryString.AllKeys; 
     Array.Sort(keys); 

     StringBuilder sb = new StringBuilder(); 
     foreach (string key in keys) 
     { 
      if (key.IndexOf("pages_")!=-1) 
      { 
       sb.Append(Request.QueryString[key]); 
      } 
     } 

     // sb container the all values 
0

你也可以把所有東西都放在這樣一個物體上:

var prm = { pages=[...], someOtherPages=[], additionalParam="", integer=1324 } 
jQuery.ajax({ 
    url: "someurl.aspx", 
    type: "POST", 
    data: {prm: JSON.stringify(prm)}, 
    }); 

,並通過使用this JSON Parser解析C#的側PRM:

JObject json = JObject.Parse(Request.Form["prm"]); 
JArray items = json["pages"] as JArray; 
foreach (JToken item in items) 
{ 
    int i = item["type"].Value<int>(); // take an item as int 
    string s = item["type"].Value<string>(); // take an item as string 
    JArray ar = item["complex"] as JArray; // that an item as an array 
} 

多simplier靈活

+0

我喜歡這個解決方案的外觀,謝謝我現在要放棄它 – Tablet 2009-08-20 15:08:40