2011-04-29 87 views
13

El objetivo es obtener los datos del ViewBag.Array en una matriz de Javascript. Los datos se calculan en el controlador, por lo que no puedo recuperarlos directamente de la base de datos. Necesito los datos para dibujar un gráfico con jqplot. Código:MVC: Iterar una matriz Viewbag en javascript

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

el problema es " 'i' no existe en el contexto actual" en el @ViewBag.Array[i] pero no tiene problemas en el jScriptArray[i]. Cualquier ayuda es apreciada.

Respuesta

36

Puede intentar lo siguiente:

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

Éste lo hizo. Gracias, salvó mi día. – Esa

+1

¿Qué tal una matriz bidimensional? Usando esta técnica termina en una dimensión. –

+0

@JohnMeyer ¿Ya descubrió una forma de trabajar con el conjunto viewbag bidimensional? –

-1

La mejor manera de lograr su objetivo es crear un controlador de JSON que devuelve los datos en una matriz JSON.

Desde su javascript puede solicitar los datos y luego procesarlos.

Esperanza esto ayuda

+0

No, esto [se puede hacer] (http://stackoverflow.com/questions/5830549/mvc-iterating-a-viewbag-array-in-javascript/5830594#5830594). No es necesario crear un controlador que devuelva JSON para esto. –

+0

Lo siento por que no se puede hacer, pero es mejor usar un controlador JSON que usar Viewbag para la comunicación javascript en el lado del servidor. – alexl

+1

para la comunicación 'javascript -> server' sí, es mejor, estoy de acuerdo. Pero aquí estamos hablando de la comunicación 'server -> javascript'. El servidor ya envió un modelo de vista a la vista, sería malo realizar una solicitud AJAX adicional solo para serializar JSON este modelo cuando esto se pueda hacer directamente. –

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

Usted va a terminar con algo como esto en el archivo html:

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