.NET MVC4 DropDownList使用外键行为异常

标签 .net drop-down-menu

首先,我是 .NET MVC 的新手,尽管我之前已经接触过一般的 MVC 思想。我使用 .NET MVC4 和使用 Entity Framework 的 CodeFirst。

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

相关代码如下:

从 View (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>

从 Controller (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; }
}

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

最佳答案

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

public int ProgramId { get; set; }

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

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

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

关于.NET MVC4 DropDownList使用外键行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12960416/

相关文章:

c# - 是否可以为文本框定义 "Word boundary"个字符?

c# - 通过限制派生的类型的 XML 对象绑定(bind)

javascript - 请帮助将水平 css 下拉菜单更改为垂直下拉菜单

javascript - Angular 选择框在 mozilla、Internet Explorer (bootstrap-select) 中不显示

php - PHP 和 MySQL 中的三级巨型菜单

c# - 函数参数 : IEnumerable, ICollection 还是数组?

c# - 在创建未知数量的可观察量时将其组合/合并在一起

javascript - 如何创建没有嵌套列表的下拉菜单?

.net - 如何使用 NuGet 包分发可执行文件

css - 垂直三级下拉菜单