c# - MVC DropDownList 从一个数据库表填充并发送到另一个数据库表

标签 c# asp.net-mvc model-view-controller drop-down-menu

我想要一个下拉列表,它从资格表中提取数据,然后在 HttpPost 上将下拉列表中选择的值存储到员工表上的“资格”列中。我对 MVC 很陌生,而且不太了解语法。我也不知道如何使用 jquery、vb 等。如果有一篇文章涵盖了这一点,我很抱歉,但我没有看到它,因为我不知道我在看什么。

这是目前我对此的最佳尝试:

Controller :

private Database1Entities db = new Database1Entities();
...
...
...
    // GET: /Home/CreateEmp
            public ActionResult CreateEmp()
            {
                ViewBag.QualList = new SelectList(db.Qualifications, "Id", "qual");
                return View();
            }
            // POST: /Home/CreateEmployee
            [HttpPost, ActionName("CreateEmployee")]
            public ActionResult CreateEmpResult(Employee emp)
            {
                if (ModelState.IsValid)
                {
                    db.Employees.Add(emp);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                ViewBag.QualList = new SelectList(db.Qualifications, "Id", "qual", emp.qualification);
                return View(emp);
            }

创建员工 View :

@model MvcDropDownList.Models.Employee
    @using (Html.BeginForm("CreateEmployee", "Home", FormMethod.Post))
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)
        <table>
        <!-- other fields removed for sake of simplicity -->
        <tr>
            <td>
                @Html.Label("Select Your Qualification:")
            </td>

            <td>
                @Html.DropDownList("QualList", "--Select--")
            </td>
        </tr>
    </table>
    }

表结构:

Qualifications Table: Id, qual

Employee Table: Id, firstName, surName, gender, qualification

我的代码成功从“资格”表中获取数据,但未将其发布到“员工”表中的“资格”列。

如有任何建议,我们将不胜感激,谢谢!

最佳答案

您应该将下拉列表绑定(bind)到单击“保存”按钮时返回的模型。

换句话说,这个:

@Html.DropDownList("QualList", "--Select--")

应该变成这样:

@Html.DropDownListFor(model => model.Qualification_Id, (SelectList)ViewBag.QualList)

编辑 正如 Stephen Muecke 指出的,您需要将 Viewbag 值转换为 SelectList

注意DropDownListFor()有多种可能性。为了清楚起见,我只选择了最简单的一个,但您可以添加可选标签等。

这会将其绑定(bind)到您的模型 (emp):

public ActionResult CreateEmpResult(Employee emp)

注意:如果您的 Employee 类已正确设置并具有所需的外键(链接到资格表),则应该已经有一个 。您的 Employee 类中的 Qualification_Id(或类似名称)(假设该类是您的实际数据库实体)。

这些更改将涵盖您需要的一切:

  • 下拉列表现在将所选值写入 emp.Qualification_Id
  • 在 Controller 方法中,将 emp 保存到数据库。
  • EF 将使用 FK 字段 (emp.Qualification_Id) 确保将正确的值写入将在数据库中创建的新员工行中。

作为一般规则,始终尝试将控件(下拉列表、文本框等)绑定(bind)到模型的属性。如果您这样做,则无需编写特定代码即可完成基本相同的操作。

关于c# - MVC DropDownList 从一个数据库表填充并发送到另一个数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28984916/

相关文章:

c# - 为什么 WCF/Mongo 抛出异常 : An item with the same key has already been added

c# - iOs 等同于 Android 的共享功能

c# - 从没有正则表达式的字符串中获取一组数字

c# - HTML 操作链接 asp.net mvc

javascript - AJAX:如何使用返回的数组?

c# - 在 Visual Studio 中调试时激活自定义新窗口

asp.net-mvc - 如何在 ASP.NET MVC 4 中定义一个捕获(绝对)所有路由

javascript - 单击一次后禁用按钮

c# - 关于在 C# MVC 中实现命令模式的问题

php - 如何将逻辑插入模型而不是将其保留在 Controller 中?