从数据库模型中抓取数据并在视图中显示它将不会显示

时间:2015-05-02 20:38:28

标签: asp.net asp.net-mvc asp.net-mvc-4 razor

我正在将Windows桌面应用程序移植到ASP.NET MVC应用程序。我在数据库中有一堆表,我可以创建控制器来生成视图,它工作正常。我想创建一个页面来显示具有设置为false的某个列的所有名称。因为没有存储此数据的表,所以我必须使用linq手动查询结果。所以我所做的就是忽略了模型的创建并创建了控制器。

    private raceEntities db = new raceEntities();

    // GET: Registrants
    public ActionResult Index()
    {
        var registrants = (from per in db.people
                          join personorgrole in db.personorganizationroles on per.PersonID equals personorgrole.PersonID
                          join personeve in db.personevents on personorgrole.PersonOrganizationRoleID equals personeve.PersonOrganizationRoleID
                          join eventcla in db.eventclasses on personeve.RaceEventID equals eventcla.RaceEventID
                          join racecla in db.raceclasses on eventcla.RaceClassID equals racecla.RaceClassID
                          join personeventcla in db.personeventclasses on eventcla.EventClassID equals personeventcla.EventClassID
                          where personorgrole.PersonID == 90946
                          select new { per.FirstName, per.LastName }).ToList();
        ViewBag.Res = registrants;

        return View();
    }

在视图中我有这段代码

@model IEnumerable<IDFWebApp.Controllers.Custom.peopleController>
@{
    ViewBag.Title = "Index";
}

<ul>
    @foreach (var r in ViewBag.Res)
    {
        <li>
            @r
        </li>
    }
</ul>

目前,此查询用于测试目的,以查看数据是否将显示在页面上,但不显示名称。

1 个答案:

答案 0 :(得分:0)

您的LINQ投影正在此处创建匿名类型:

select new { per.FirstName, per.LastName }

虽然在控制器内部没问题,但实际上它的范围是internal,这使得视图无法访问。因此,避免使用服务器端视图模型会导致ViewBag数据无法使用。

制作服务器端视图模型并将其传递给视图。无论如何,这是ASP.NET MVC开发的标准方法。

不是说ViewBag不好,但我会将其用作次要方法,而不是替代视图模型。