2009-09-10 14 views
8

Sam się tutaj zmagam, aby znaleźć prosty sposób przekazania tablicy z kontrolera do widoku w środowisku ASP.NET MVC.ASP.NET MVC - jak przekazać tablicę do widoku?

więc w moim kontrolera chciałbym mieć coś takiego:

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

więc moim zdaniem to mam tylko wezwanie do ViewData [ „passedArray”] i uruchomić pętlę na nim.

Ale widocznie ViewData jest odbierany przez widok jak System.String, prawdopodobnie z powodu deklaracji na typ danych Array, ale niestety nie wiem jak przekazać ją prawidłowo i po prostu bez stworzyć miliony linii kodu.

Byłoby fantastycznie, gdyby mógł mi pomóc.

góry dzięki

Odpowiedz

12

Musisz rzucać w Widoku

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

Dzięki za agileguy jesteś naprawdę bardzo zwinny! Dokładnie to, co chciałem. Twoje zdrowie – zanona

8

To powinno działać przez odlewanie ViewData [ "passedArray"] w celu string []. Alternatywnie, jeśli chcesz zrobić coś więcej: utwórz klasę ViewModel, która zawiera tę tablicę jako element członkowski, i przekaż ten model ViewModel do mocno napisanej wersji twojego widoku.

+0

dziękuję David użyłem casting, jak pan powiedział, to jest doskonały. Ale podoba mi się pomysł stworzenia konkretnego modelu do zarządzania zmiennymi. Postaram się lepiej o tym poinformować. Jeszcze raz dziękuję. – zanona

+0

Istnieje kilka dobrych powodów, dla których warto wybrać model ViewModel. (1) Potrzeba obsady otwiera drzwi do błędów runtime. (2) Utworzenie narzędzia ViewModel zapewnia elastyczność w przyszłości, umożliwiając dodawanie funkcji zgodnie z potrzebami, bez konieczności zmiany typu widoku. (3) Twój kod będzie nieco bardziej czytelny, bez widoku ViewData ["key"] kodu w twoim widoku. –

+0

David, więc masz na myśli, jeśli tworzę nową klasę dla kontrolera jak MyCustomViewModel i przekazuję tę klasę jak var myCustomOne = new MyCustomViewModel(); myCustomOne.myArray = new int [] {1,2,3,4} return View (myCustomOne); Mogę mieć dostęp do tej tablicy w moim widoku, jak: Model.myArray jako int [] czy to prawda? – zanona

0

Można użyć PartialView tak:

  • Controller

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

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