2

首先,我是 .NET MVC 的新手,尽管我之前使用过一般的 MVC 理念。我正在使用 .NET MVC4 和 CodeFirst,使用实体框架。

我正在尝试向“创建”视图添加一个简单的下拉列表,以允许用户选择与另一个模型相关的外键。

以下是相关代码:

从视图(PropertyProgram/Create):

<div class="editor-field">
    @Html.DropDownListFor(model => model.Program.ID, new SelectList(ViewBag.Programs, "Id","Name"));
    @Html.ValidationMessageFor(model => model.Program.ID);
</div>

从控制器(PropertyProgramController):

public ActionResult Create()
{
    ViewBag.Programs = db.Programs;
    return View();
}

来自模型(PropertyProgram):

public class PropertyProgram
{
    public int Id { get; set; }
    public virtual Program Program { get; set; }
}

视图正常工作,下拉列表中显示了正确的数据,但由于某种原因,在发布后,在数据库的 Program 表中创建了一个新行,其中除 ID 之外的所有内容均为空字段。对于创建的 PropertyProgram 行,预期的行为是将下拉列表中选择的 Program ID 放入数据库的 Program_ID 列中。知道为什么这不符合预期吗?

4

1 回答 1

3

当然,在我写完这个问题十分钟后,我就知道答案了!所以显然在实体框架中,只有一个虚拟链接是不够的,你还必须有一个指向表的 ID。我只是将这行代码添加到 PropertyProgram 模型中:

public int ProgramId { get; set; }

添加后,我创建了一个迁移,然后我将下拉代码更改为:

@Html.DropDownListFor(model => model.ProgramId, new SelectList(ViewBag.Programs, "Id", "Name"));

在此之后,一切正常!我不是 100% 确定为什么要解决这个问题,但确实如此。如果有人愿意解释原因,我将不胜感激。

于 2012-10-19T13:38:22.157 回答