MVC DropDownList从一个DB表填充并发送到另一个DB表

我想有一个下拉列表,它从资格表中提取数据,然后在HttpPost上,它将下拉列表中选择的值存储到employee表上的“qualified”列。 我对MVC很新,我不太清楚语法。 我也不知道如何使用jquery,vb等所以很抱歉,如果有一个post覆盖了这个,我没有看到它,因为我不知道我在看什么。

这是我最好的尝试:

控制器:

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) 
@Html.Label("Select Your Qualification:") @Html.DropDownList("QualList", "--Select--")
}

表结构:

资格表:Id,qual

员工表:Id,firstName,surName,性别,资格

我的代码成功从“Qualification”表中获取数据,但不将其发布到“employee”表中的“qualified”列。

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

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

换句话说,这个:

 @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表),那么Employee类中应该已经存在.Qualification_Id (或类似名称)(假设该类是您的实际数据库实体) 。

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

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

作为一般规则,始终尝试将控件(下拉列表,文本框,…)绑定到模型的属性。 如果你这样做,你不需要编写特定的代码来做基本相同的事情。

我不知道这是否会有所帮助,但我创建了一个模型类,创建了多个列表,我将在整个应用程序中使用其中一个列表如下: –

 SKTDATABASEEntities db = new SKTDATABASEEntities(); public List Departments { get { return db.Departments.ToList(); } } 

@oli_taz使用上面的代码和viewdata而不是viewbag我只需要修改我的视图

 <%: Html.DropDownListFor(model=>model.Department,new SelectList((IEnumerable)ViewData["depies"], "Department")) %>