2011-04-29 141 views
13

目标是将数据从ViewBag.Array获取到Javascript数组。数据是在控制器中计算的,所以我无法直接从数据库中获取数据。我需要数据用jqplot绘制图表。代码:MVC:在Javascript中迭代Viewbag数组

for(i = 0; i < @ViewBag.Array.Length; i++) 
{ 
    jScriptArray[i] = @ViewBag.Array[i]; 
} 

问题是在@ViewBag.Array[i]“‘我’不存在当前上下文存在”但在jScriptArray[i]没有问题。任何帮助表示赞赏。

回答

36

你可以尝试以下方法:

var array = @Html.Raw(Json.Encode(@ViewBag.Array)); 
for(var i = 0; i < array.length; i++) { 
    jScriptArray[i] = array[i]; 
} 
+2

这一次做到了。谢谢,救了我的一天。 – Esa 2011-04-29 10:28:03

+1

二维数组如何?使用这种技术,它结束了一维。 – 2013-11-21 17:23:37

+0

@JohnMeyer你有没有想办法使用二维viewbag数组呢? – 2014-07-31 18:20:27

-1

,以实现自己的目标,最好的办法是创建一个JSON控制器将数据返回到一个JSON数组。

从你的JavaScript你可以请求数据,然后处理它。

希望这有助于

+0

不,这[可以做](http://stackoverflow.com/questions/5830549/mvc-iterating-a-viewbag-array-in-javascript/5830594#5830594)。无需为此创建一个返回JSON的控制器。 – 2011-04-29 09:58:24

+0

抱歉无法完成,但使用JSON控制器比使用Viewbag进行JavaScript服务器端通信更好。 – alexl 2011-04-29 10:00:56

+1

对于'javascript - > server'通信是的,这是更好的,我同意。但在这里我们正在讨论'服务器 - > javascript'通信。服务器已经向视图发送了一个视图模型,当直接完成这个模型时,对JSON执行一个附加的AJAX请求会很不好。 – 2011-04-29 10:05:17

0
<script> 
var jScriptArray=[]; 
@{ 
    for(i = 0; i < ViewBag.Array.Length; i++){ 
     <text>jScriptArray[@i] = "@ViewBag.Array[@i]";</text> 
     i++; 
    } 
    } 
</script> 

最后你会在HTML文件中是这样的:

jScriptArray[0] = "ArrayValue0"; 
jScriptArray[1] = "ArrayValue1"; 
jScriptArray[2] = "ArrayValue2";