我想将数组(2维)从控制器传递给javascript变量。我使用会话通过,但这不起作用。在javascript代码中我使用如下:
var data = '<%= Session["LatLon"] %>';
运行项目并使用inspect元素时,有数据:
如何通过?我可以通过会话传递2 dim的数组吗?
答案 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() %>
。