我没有太多的编程经验,而且我是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 :(得分:4)
密钥为ViewData
的{{1}}项为"Gradovi"
类型,因此需要
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);
}
答案 1 :(得分: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>
}