在列表视图中显示引用表中的列

时间:2016-05-05 17:01:23

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

到目前为止,我是ASP.NET MVC的完全新手,只有1天的经验。

我正在尝试显示员工及其部门的列表。我为员工和部门设置了单独的表(我使用的是Entity Framework 6和Database First架构)。

enter image description here

这是从数据库生成的代码。

public partial class employee
{
    public int employeeid { get; set; }
    public string employeename { get; set; }
    public string designation { get; set; }
    public Nullable<int> departmentid { get; set; }

    public virtual department department { get; set; }
}

在我的员工控制器中,我有我的索引页面的代码

public ActionResult Index()
    {
        IQueryable<employee> employees = db.employees
            .Include(d => d.department);

        return View(employees.ToList());
    }

在我的Razor视图中,我有这段代码

    <td>
        @Html.DisplayFor(modelItem => item.employeename)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.designation)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.department.departmentname)
    </td>

但是,当我运行应用程序时,部门名称显示为空白。其他字段正确显示。

注意:我可以使用部门下拉列表插入员工,如屏幕截图所示。我只是不明白为什么列表视图模式不起作用。

enter image description here

1 个答案:

答案 0 :(得分:0)

哦,不,我犯了一个非常愚蠢的错误。

在我的控制器的Create方法的参数列表中,缺少了departmentid。

public ActionResult Create([Bind(Include = "employeeid,employeename,designation,departmentid")] employee employee)

我在从SQL Server Studio检查数据库后发现它已经注意到了,并且看到了离开的字段被保存为NULL。

而且,我意识到而不是

public ActionResult Index()
{
    IQueryable<employee> employees = db.employees
        .Include(d => d.department);

    return View(employees.ToList());
}

只有以下代码就够了

    public ActionResult Index()
    {
        return View(db.employees.ToList());
    }