2013-10-24 36 views
1

我有这些数据在代码隐藏中,并尝试以各种格式将它传递给javascript函数:列表数组,但无法通过javascript var对象获取数据。 这里数据背后的代码的最后格式:如何将c#数据表传递给javascript函数

List<string>[] array2 = new List<string>[listLenght]; 
    array2.Initialize(); 

    for (int ii = 0; ii < listLenght; ii++) 
    { 
    array2[ii] = new List<string>(); 
     array2[ii].Add(Convert.ToString(dt.Rows[ii][5])); 
     array2[ii].Add(Convert.ToString(dt.Rows[ii][9])); 
     array2[ii].Add(Convert.ToString(dt.Rows[ii][10])); 
     array2[ii].Add(Convert.ToString(dt.Rows[ii][11])); 

    } 

然后试着打电话给javascriot这样:

string createArrayScript = string.Format("var array2 = [{0},{1},{2},{3}];",   string.Join(",",",",",", array2)); 

但返回一个错误:出现FormatException是由用户代码 指数(未处理基于零)必须大于或等于零并且小于主题列表的大小。这个函数调用: Page.ClientScript.RegisterStartupScript(this.GetType(),“registerPoiArray”,createArrayScript,true);

这里的JavaScript VAR格式:

var markers = Poi; 

     var markers = [ 
{ 
"title": "via Andria, Roma", 
"lat": 41.8902643, 
"lng": 12.6638589, 
"description": "fdsad" 
}, 
{ 
"title": "via canosa, Roma", 
"lat": 41.8838417, 
"lng": 12.5438227, 
"description": "fdsad" 
}, 
{ 
"title": "via taranto, Milano", 
"lat": 45.4383343, 
"lng": 9.1505354, 
"description": "fdsad" 
}, 
{ 
"title": "via barletta, Roma", 
"lat": 41.9102707, 
"lng": 12.4580826, 
"description": "fdsad" 
}]; 

我不能在JavaScript通过这个阵列。请帮助我

+0

系列化你的数据表到JSON –

回答

0

尝试使用

System.Web.Helpers.Json.Encode 

并更改你所得到的结构。

List<object> toEncode=new List<object>(); 
foreach (DataRow dr in dt.Rows){ 
    Dictionary<string,string> element=new Dictionary<string,string>(); 
    element.Add("title",dr["title"] as string); 
    //repeat for all neaded colums 
    toEncode.Add(element); 
} 
string jsonString=Json.Encode(toEncode); 
3

您可以创建一个自定义类来表示Datatable。假如你的数据表有四列,创建一个有4个字段的自定义类。循环访问数据表并将其转换为自定义类类型的对象数组。

最后,您可以使用以下代码将数组序列化为json。其中数据是对象数组。

这是我所使用的技术..

数据表不能直接容易序列化到JSON。请参考What's the best way to jSON serialize a .NET DataTable in WCF?

0

当我提出解决方案时,我创建了一个gist

我希望这对你的作品...

问候,

1

你必须使用的String.Format时,如果你想让它吐出实际花括号逃脱(翻倍)的大括号字符。

例子:

string createArrayScript = 
    string.Format("var array2 = [{{0}},{{1}},{{2}},{{3}}];", 
    ... 
0

只需使用NewtonSoft JSON和调用:

var JsonString = JsonConvert.SerializeObject(NameofDT, Formatting.Indented)