2009-09-10 21 views
8

Estoy luchando para encontrar una manera fácil de pasar una matriz desde el controlador a la vista en el marco ASP.NET MVC.ASP.NET MVC - ¿Cómo pasar una matriz a la vista?

así que en mi controlador Me gustaría tener algo como:

public class HomeController : ApplicationController 
{ 
    public ActionResult Index() 
    { 
     string[] myArray = { "value01", "value02", "value03"}; 
     ViewData["passedArray"] = myArray; 
     return View(); 
    } 
} 

por lo que en mi opinión me hubiera sólo una llamada a ViewData [ "passedArray"] y ejecutar un bucle en él.

Pero al parecer el ViewData está siendo recibido por la vista como System.String, probablemente debido a la declaración sobre el Tipo de datos Array, pero por desgracia no sé cómo pasar correctamente y simplemente sin crear millones de líneas de código.

Sería fantástico si alguien pudiera ayudarme.

Gracias de antemano

Respuesta

12

, es necesario especificar en la vista

<% var myArray = (string[])ViewData["passedArray"]; %> 
+0

¡Gracias por eso ágil eres realmente muy ágil! Exactamente lo que quería. Aclamaciones – zanona

8

Esto debería funcionar por colada ViewData [ "passedArray"] dentro de la vista a la cadena []. Alternativamente, si desea hacer un esfuerzo adicional: cree una clase ViewModel que contenga esta matriz como miembro y pase ese ViewModel a una versión fuertemente tipada de su vista.

+0

Muchas gracias David I utilizan el casting como usted ha dicho, es perfecto. Pero me gusta la idea de crear un modelo de vista específico para administrar variables. Intentaré informarme mejor al respecto. Gracias de nuevo. – zanona

+0

Existen bastantes buenas razones para optar por un ViewModel. (1) La necesidad de un yeso abre la puerta a errores de tiempo de ejecución. (2) La creación de un ViewModel le ofrece flexibilidad en el futuro para agregar funciones a medida que las necesita sin tener que cambiar el tipo de vista. (3) Su código será un poco más legible sin el código ViewData ["clave"] en su vista. –

+0

David, entonces quieres decir si creo una nueva clase para el controlador como un MyCustomViewModel y paso esta clase como var myCustomOne = new MyCustomViewModel(); myCustomOne.myArray = new int [] {1,2,3,4} return Ver (myCustomOne); Podría acceder a esa matriz en mi vista como: Model.myArray como int [] ¿es así? – zanona

0

Puede utilizar PartialView así:

  • controlador

    public ActionResult Index() 
        { 
         List<string> arr = new List<string>() { "apple", "banana", "cat" }; 
         return View(arr); 
        } 
    
  • Ver

@model List<string> 
@foreach (var item in Model) { 
     @Html.Partial("~/Views/Shared/Fruits/_myFruits.cshtml", item); 
} 
  • PatialView decir _myFruits.cshtml
@model string 
<li>@Model</li> 
Cuestiones relacionadas