2015-03-10 6 views
6

Sto cercando di visualizzare l'elenco che ho creato nella mia vista ma continuo a ricevere: "L'elemento del modello passato nel dizionario è di tipo 'System.Collections.Generic.List 1[System.String]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [Classifiche. Models.Teams]'."Elenco di visualizzazione in una vista MVC

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

Il mio modello:

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

mio punto di vista:

@model IEnumerable<Standings.Models.Teams> 

@{ 
ViewBag.Title = "Standings"; 
} 

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

Qualsiasi aiuto sarebbe apprezzato :)

+0

Vuoi passare una collezione di squadre o di un elenco di nomi di squadra (che è ciò che si sta passando)? –

+0

Perché un oggetto della squadra di calcio è chiamato "Teams" (plurale) e perché una squadra ha più nomi? Penso che tu abbia bisogno di guardare attentamente la tua modella! –

+0

Prova la mia risposta qui sotto. Il tuo modello non è implementato correttamente. –

risposta

13

tuo metodo di azione considera il modello digitare un s List<string>. Ma, dal tuo punto di vista, stai aspettando il IEnumerable<Standings.Models.Teams>. È possibile risolvere questo problema modificando il modello nella vista su List<string>.

Tuttavia, l'approccio migliore sarebbe quello di restituire IEnumerable<Standings.Models.Teams> come modello dal metodo di azione. Quindi non devi cambiare il tipo di modello nella tua vista.

Ma, a mio parere i modelli non sono stati implementati correttamente. Vi suggerisco di cambiare come:

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

Quindi è necessario modificare il metodo di azione come:

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

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

    return View(model); 
} 

E, la vista:

@model IEnumerable<Standings.Models.Team> 

@{ 
    ViewBag.Title = "Standings"; 
} 

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

Dovrebbe essere 'model.Add (new Team() {Name = new List () {" Manchester United "}});' ('Name' è una raccolta) –

+0

@StephenMuecke I modelli di OP sono un po 'fuori di standart. Grazie, ho aggiornato. –

+1

Il modello OP non ha alcun senso :) Presumo che 'Name' dovrebbe essere typeof' string' non 'List ' –

0

Si passa modalità sbagliato per voi vista. La tua vista sta cercando @model IEnumerable<Standings.Models.Teams> e stai passando l'elenco dei nomi var model = tm.Name.ToList();. Devi passare la lista delle squadre .

devi passare seguente modello

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