2015-03-10 25 views
6

Próbuję wyświetlić listę, którą zrobiłem w moim widoku, ale nadal otrzymuję: "Element modelu przekazany do słownika jest typu" System.Collections.Generic.List 1[System.String]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [Tabele. Models.Teams] "."Wyświetlanie listy w widoku MVC

My Kontroler:

public class HomeController : Controller 
{ 
    Teams tm = new Teams(); 

    public ActionResult Index() 
    { 
     var model = tm.Name.ToList(); 

     model.Add("Manchester United"); 
     model.Add("Chelsea"); 
     model.Add("Manchester City"); 
     model.Add("Arsenal"); 
     model.Add("Liverpool"); 
     model.Add("Tottenham"); 

     return View(model); 
    } 

Mój model:

public class Teams 
{ 
    public int Position { get; set; } 
    public string HomeGround {get; set;} 
    public string NickName {get; set;} 
    public int Founded { get; set; } 

    public List<string> Name = new List<string>(); 
} 

Moim zdaniem:

@model IEnumerable<Standings.Models.Teams> 

@{ 
ViewBag.Title = "Standings"; 
} 

@foreach (var item in Model) 
{ 
    <div> 
     @item.Name 
     <hr /> 
    </div> 
} 

Każda pomoc będzie mile widziane :)

+0

chcesz przekazać zbiór zespołów lub listę nazwisk zespołu (czego jesteś przejazdem)? –

+0

Dlaczego obiekt drużyny piłkarskiej nosi nazwę "Drużyny" (liczba mnoga) i dlaczego jedna drużyna ma wiele imion? Myślę, że musisz uważnie przyjrzeć się modelowi! –

+0

Wypróbuj moją odpowiedź poniżej. Twój model nie jest zaimplementowany poprawnie. –

Odpowiedz

13

Twoja metoda działania uważa modelu wpisz a s List<string>. Ale, według ciebie, czekasz na IEnumerable<Standings.Models.Teams>. Możesz rozwiązać ten problem, zmieniając model w swoim widoku na List<string>.

Ale najlepszym sposobem jest zwrócenie IEnumerable<Standings.Models.Teams> jako modelu z metody działania. Wtedy nie musisz zmieniać typu modelu w swoim widoku.

Ale, moim zdaniem Twoje modele nie są poprawnie wdrożone. Proponuję, aby zmienić go jako:

public class Team 
{ 
    public int Position { get; set; } 
    public string HomeGround {get; set;} 
    public string NickName {get; set;} 
    public int Founded { get; set; } 
    public string Name { get; set; } 
} 

Następnie trzeba zmienić metodę działania jak:

public ActionResult Index() 
{ 
    var model = new List<Team>(); 

    model.Add(new Team { Name = "MU"}); 
    model.Add(new Team { Name = "Chelsea"}); 
    ... 

    return View(model); 
} 

, a Twoim zdaniem:

@model IEnumerable<Standings.Models.Team> 

@{ 
    ViewBag.Title = "Standings"; 
} 

@foreach (var item in Model) 
{ 
    <div> 
     @item.Name 
     <hr /> 
    </div> 
} 
+0

Musi to być 'model.Add (nowa drużyna() {Nazwa = nowa lista () {" Manchester United "}});' ("Nazwa" to kolekcja) –

+0

@StephenMuecke Modele OP są trochę poza standardu. Dzięki, zaktualizowałem. –

+1

Model OP w ogóle nie ma sensu. Zakładam, że 'Name' powinien być typem' string' not' Listem ' –

0

są przechodzącą tryb złego do ciebie widok. Twój widok szuka @model IEnumerable<Standings.Models.Teams> i przechodzisz na listę imion var model = tm.Name.ToList();. Musisz podać listę Zespołów.

musiał przejść po modelu

var model = new List<Teams>(); 

model.Add(new Teams { Name = new List<string>(){"Sky","ABC"}}); 
model.Add(new Teams { Name = new List<string>(){"John","XYZ"} }); 
return View(model); 
Powiązane problemy