2015-03-10 17 views
6

Ich versuche, die Liste anzuzeigen, die ich in meiner Ansicht erstellt habe, bekomme aber immer: "Das an das Wörterbuch übergebene Modellelement ist vom Typ 'System.Collections.Generic.List 1[System.String]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [Standings. Models.Teams] '. "Liste in einer Ansicht anzeigen MVC

Mein Controller:

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); 
    } 

Mein Modell:

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>(); 
} 

Meine Ansicht:

@model IEnumerable<Standings.Models.Teams> 

@{ 
ViewBag.Title = "Standings"; 
} 

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

Jede mögliche Hilfe würde geschätzt :)

+0

Haben Sie eine Sammlung von Teams oder eine Liste der Teamnamen übergeben wollen (was ist das, was Sie vorbei)? –

+0

Warum wird ein Football-Team-Objekt "Teams" (Plural) genannt und warum hat ein Team mehrere Namen? Ich denke du musst dir dein Model genau anschauen! –

+0

Versuchen Sie meine Antwort unten. Ihr Modell ist nicht korrekt implementiert. –

Antwort

13

Ihre Aktion-Methode betrachtet Modell Tippe A s List<string>. Sie warten jedoch auf IEnumerable<Standings.Models.Teams>. Sie können dieses Problem lösen, indem Sie das Modell in Ihrer Ansicht zu List<string> ändern.

Aber der beste Ansatz wäre, IEnumerable<Standings.Models.Teams> als Modell von Ihrer Aktionsmethode zurückzugeben. Dann müssen Sie den Modelltyp in Ihrer Ansicht nicht ändern.

Aber, meiner Meinung nach sind Ihre Modelle nicht korrekt implementiert. Ich schlage vor, Sie zu ändern:

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; } 
} 

Dann müssen Sie Ihre Aktionsmethode ändern:

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

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

    return View(model); 
} 

Und Ihre Ansicht:

@model IEnumerable<Standings.Models.Team> 

@{ 
    ViewBag.Title = "Standings"; 
} 

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

Es müsste 'model.Add (neues Team() {Name = neue Liste () {" Manchester United "});' ('Name' ist eine Sammlung) –

+0

@StephenMuecke OP Modelle sind ein bisschen raus Standart. Danke, ich habe aktualisiert. –

+1

OP-Modell macht überhaupt keinen Sinn :) Ich nehme an, 'Name' sollte typeof' string' sein nicht 'Liste ' –

0

Sie passieren falschen Modus zu Ihnen Aussicht. Ihre Ansicht sucht nach @model IEnumerable<Standings.Models.Teams> und Sie übergeben var model = tm.Name.ToList(); Namensliste. Sie müssen die Liste der Teams übergeben.

Sie haben folgende Modell passieren

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); 
Verwandte Themen