2009-08-20 79 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