我希望有一个下拉列表,该列表从资格表中提取数据,然后在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/