如何将数组从控制器传递给javascript?

时间:2016-03-16 06:54:55

标签: javascript asp.net-mvc-4

我想将数组(2维)从控制器传递给javascript变量。我使用会话通过,但这不起作用。在javascript代码中我使用如下:

 var data = '<%= Session["LatLon"] %>';

运行项目并使用inspect元素时,有数据:

enter image description here

如何通过?我可以通过会话传递2 dim的数组吗?

2 个答案:

答案 0 :(得分:2)

将值插入Session["LatLon"]时,请将其另存为JSON而不是C#字符串数组。

string[][] mystringarr = ...
Session["LatLon"] = JsonConvert.SerializeObject(mystringarr);

在视图中使用

var data = <%= Session["LatLon"] %>;

所以它会产生类似

的东西
var data = [["1.0", "1.4"], ["4.6","4.8"]];

使用JSON.NET http://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_JsonConvert_SerializeObject.htm

答案 1 :(得分:0)

您当前正在观察的是.ToString对象的执行Session["LetLon"]方法的结果。

您打算收到的是var data = [[1, 2], [3, 4]];

所以你可以简单地写出二维数组的正确字符串化。我建议写简单的扩展方法:

public static string ToJsString(this string[,] array) {
     return Enumerable.Range(0, array.GetLength(0))
            .Aggregate(new StringBuilder(),
                (sbi, i) => sbi.AppendFormat(i == 0 ? "{0}" : ", {0}",
                    Enumerable.Range(0, array.GetLength(1))
                        .Aggregate(new StringBuilder(),
                            (sbj, j) => sbj.AppendFormat(j == 0 ? "{0}" : ", {0}", array[i,j]),
                            sbj => string.Format("[{0}]", sbj))), 
                sb => string.Format("[{0}]", sb));
}

为了使用它,请写下var data = <%= ((string[,])Session["LatLon"]).ToJsString() %>