2016-04-29 160 views
0

我没有太多的编程经验,我是MVC的新手。MVC从模型通过控制器传递对象到视图

我想用实体框架从数据库中提取一些数据并将其打印在视图中。

这是我的模型:

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

这是一个控制器:

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

,这是一个观点:

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

我知道,我必须分析数据,但不知道我做错了什么

+0

感谢您的回答。我很伤心,我是编程和MVC的新手,对实体框架和那种东西还不太熟悉。这是我第一次尝试从数据库中打印某些东西。是的,只是试图显示一个ID列表 – Fale1994

回答

4

ViewData项目与关键"Gradovi"是typeof运算SelectList,因此将需要

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

但是没有点产生IEnumerable<SelectListItem>(这是什么SelectList是),当你不需要它,你应该将模型传递给视图。你在控制器代码应该是

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

,并在视图

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

您的代码可以工作就像你拥有了它,但我要稍作修改,并给你一些指针。我正在提供一个基于我在你的帖子中看到的答案,而不是我认为你想在以后阶段实现的答案。有很多方法来实现目标,我会选择我通常会用最简单的方法:

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

然后你的观点看起来是这样的:

@model List<Project.Model.Grad> 

@foreach (var grad in Model) 
{ 
    <p>@grad.ID</p> 
} 
相关问题