2016-04-29 10 views
0

übergeben Ich habe nicht viel Erfahrung mit der Programmierung und ich bin neu in MVC.MVC Objekt von Modell durch Controller zur Anzeige

Ich möchte einige Daten aus der Datenbank mit Entity Framework abrufen und in der Ansicht drucken.

Das ist mein Modell:

private GradDBContext db = new GradDBContext(); 

    public ActionResult Index() 
    { 
     List<int> gradoviList = new List<int>(); 
     foreach (sea.Models.Grad g in db.Gradovi) 
     { 
      gradoviList.Add(g.ID); 
     } 
     ViewData["Gradovi"] = new SelectList(gradoviList); 
     return View(); 
    } 

und dies ist eine Ansicht:

public class Grad 
{ 
    public int ID { get; set; } 
    public string Naziv { get; set; } 
    public char KoordinataX { get; set; } 
    public char KoordinataY { get; set; } 
    public int BrojStanovnika { get; set; } 
} 
public class GradDBContext : DbContext 
{ 
    public DbSet<Grad> Gradovi { get; set; } 
} 

dies ein Controller ist

@foreach (var item in ViewData["Gradovi"] as IEnumerable<int>) ---> error appears here as null reference exception 
      { 
       <p>item</p> 
      } 

Ich weiß, dass ich Daten analysieren müssen aber habe keine Ahnung, was ich falsch gemacht habe

+0

vielen Dank für Ihre Antwort. Wie ich traurig bin, bin ich neu in der Programmierung und MVC und immer noch nicht vertraut mit Entity-Framework und diese Art von Sachen. Dies ist das erste Mal, dass ich versuche, etwas aus der Datenbank zu drucken. Ja, versuche nur eine Liste von IDs anzuzeigen – Fale1994

Antwort

4

Der ViewData Punkt mit der Taste "Gradovi" ist typeof SelectList, so wäre es

@foreach (var item in ViewData["Gradovi"] as SelectList) 
{ 
    <p>@item.Value</p> // or @item.Text 

Allerdings gibt es keinen Punkt zu erzeugen IEnumerable<SelectListItem> sein müssen (was ist das, was SelectList ist), wenn Sie es nicht brauchen, und Sie sollten Übergeben Sie Ihr Modell an die Ansicht. Ihr Code in der Steuerung sollten

public ActionResult Index() 
{ 
    IEnumerable<int> model = db.Gradovi.Select(x => x.ID); 
    return View(model); 
} 

und in der Ansicht

@model IEnumerable<int> 
@foreach(var item in Model) 
{ 
    <p>@item</p> 
} 
1

Ihr Code sein kann arbeiten wie Sie es haben, aber ich werde es ein wenig ändern und geben Ihnen einige Hinweise. Ich gebe eine Antwort, basierend auf dem, was ich in Ihrem Beitrag sehe, nicht was ich zu einem späteren Zeitpunkt erreichen möchte. Es gibt viele Möglichkeiten, um ein Ziel zu erreichen, werde ich die einfachste Art und Weise auszuwählen, die ich normalerweise verwenden:

public ActionResult Index() 
{ 
    // You will have a repository layer for this part 
    GradDBContext db = new GradDBContext(); 

    // Get a list of your items 
    List<Grad> gradovis = db.Gradovi.ToList(); 

    // I never work with view data, I just pass my view model to the view 
    // This way you now have more data to display on the screen (if you need more) 
    return View(gradovis); 
} 

Und dann Ihrer Ansicht nach könnte wie folgt aussehen:

@model List<Project.Model.Grad> 

@foreach (var grad in Model) 
{ 
    <p>@grad.ID</p> 
} 
Verwandte Themen