2009-09-10 9 views
8

Je me bats ici, pour trouver un moyen facile de passer un tableau du contrôleur à la vue sur l'infrastructure ASP.NET MVC.ASP.NET MVC - Comment passer un tableau à la vue?

donc dans mon contrôleur j'aurais quelque chose comme:

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

donc à mon avis j'aurais juste un appel à ViewData [ « passedArray »] et exécuter une boucle sur elle.

Mais apparemment le ViewData est reçu par la vue comme System.String, probablement à cause de la déclaration du type de données Array, mais malheureusement, je ne sais pas comment passer correctement et simplement sans créer des millions des lignes de code.

Ce serait fantastique si l'on pouvait m'aider.

Merci à l'avance

Répondre

12

Vous devez jeter dans la vue

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

Merci pour cet agileguy vous êtes en effet très agile! Exactement ce que je voulais. À votre santé – zanona

8

Cela devrait fonctionner par coulée ViewData [ "passedArray"] dans la vue de string []. Sinon, si vous voulez faire un effort supplémentaire: créez une classe ViewModel qui contient ce tableau en tant que membre et passez ce ViewModel à une version fortement typée de votre vue.

+0

Merci beaucoup David J'ai utilisé le casting comme vous le dites, il est parfait. Mais j'aime l'idée de créer un viewmodel spécifique pour gérer les variables. J'essaierai de mieux m'informer à ce sujet. Merci encore. – zanona

+0

Il existe plusieurs bonnes raisons d'opter pour un ViewModel. (1) La nécessité d'un plâtre ouvre la porte aux erreurs d'exécution. (2) La création d'un ViewModel vous donne la possibilité d'ajouter des fonctionnalités dans le futur sans avoir à modifier le type de la vue. (3) Votre code sera légèrement plus lisible sans le code ViewData ["key"] jeté dans votre vue. –

+0

David, donc vous voulez dire si je crée une nouvelle classe pour le contrôleur comme un MyCustomViewModel et passer cette classe comme var myCustomOne = new MyCustomViewModel(); myCustomOne.myArray = new int [] {1,2,3,4} return Vue (myCustomOne); Je serais en mesure d'accéder à ce tableau dans ma vue comme: Model.myArray comme int [] est-ce exact? – zanona

0

Vous pouvez utiliser PartialView comme ceci:

  • Contrôleur

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

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