我希望有一个下拉列表,该列表从资格表中提取数据,然后在HttpPost上将在下拉列表中选择的值存储到employee表的“ qualification”列中。我是MVC的新手,我不太了解语法。我也不知道如何使用jquery,vb等。所以很抱歉,如果那里有一篇介绍这个的帖子,而我却没有看到它,因为我不知道我在看什么。

目前,这是我最好的尝试:

控制器:

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);
            }


创建员工视图:

@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>
    }


表结构:


  资格表:Id,合格
  
  员工表:ID,名字,姓氏,性别,资格


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

任何建议将不胜感激,谢谢!

最佳答案

单击保存按钮时,应该将下拉列表绑定到要返回的模型。

换句话说,这是:

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


应该变成这样:

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


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

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

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

public ActionResult CreateEmpResult(Employee emp)


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

这些更改将满足您的所有需求:


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


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

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

10-09 08:40
查看更多