首先,我是.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行,预期的行为是将下拉列表中选择的程序ID放入数据库的Program_ID列中。知道为什么这不符合预期吗?
答案 0 :(得分:3)
当我写完这个问题十分钟后,我找到了答案!显然在实体框架中,拥有一个虚拟链接是不够的,你还必须有一个指向该表的ID。我只是将这行代码添加到PropertyProgram模型中:
public int ProgramId { get; set; }
添加后,我创建了一个迁移,然后我将下拉代码更改为:
@Html.DropDownListFor(model => model.ProgramId, new SelectList(ViewBag.Programs, "Id", "Name"));
在此之后,一切正常!我不是100%肯定为什么这个固定的东西,但确实如此。如果有人愿意解释原因,我将非常感激。