2013-10-24 58 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)