2011-04-29 41 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";