MVC将对象从模型传递到控制器到视图

时间:2016-04-29 03:16:59

标签: asp.net-mvc entity-framework asp.net-mvc-4

我没有太多的编程经验,而且我是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>
            }

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

2 个答案:

答案 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>
}