MVC DropDownList 从一个数据库 table 填充并发送到另一个数据库 table
MVC DropDownList populate from one DB table and send to another DB table
我想要一个下拉列表,它从资格 table 中提取数据,然后在 HttpPost 上,它将下拉列表中选择的值存储到员工 table 的“资格”列中。我是 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)
<table>
<!-- other fields removed for sake of simplicity -->
<tr>
<td>
@Html.Label("Select Your Qualification:")
</td>
<td>
@Html.DropDownList("QualList", "--Select--")
</td>
</tr>
</table>
}
Table 结构:
Qualifications Table: Id, qual
Employee Table: Id, firstName, surName, gender, qualification
我的代码成功地从“Qualification”table 中获取数据,但没有post它到“employee”table 中的“qualification”列。
任何建议将不胜感激,谢谢!
您应该将下拉列表绑定到单击“保存”按钮时要返回的模型。
换句话说,这个:
@Html.DropDownList("QualList", "--Select--")
应该变成这样:
@Html.DropDownListFor(model => model.Qualification_Id, (SelectList)ViewBag.QualList)
Edit 正如 Stephen Muecke 指出的那样,您需要将 Viewbag 值转换为 SelectList
.
注意 DropDownListFor()
有多种可能性。为了清楚起见,我只选择了最简单的一个,但您可以添加可选标签等。
这会将它绑定到您的模型 (emp
):
public ActionResult CreateEmpResult(Employee emp)
注意:如果您的 Employee
class 设置正确并且具有所需的外键(link 到资格 table), 在你的 Employee
class 中应该已经有一个 .Qualification_Id
(或类似的名字) (假设 class 是你实际的数据库实体).
这些更改将涵盖您需要的一切:
- 下拉列表现在将所选值写入
emp.Qualification_Id
。
- 在您的控制器方法中,您将
emp
保存到数据库。
- EF 将使用 FK 字段 (
emp.Qualification_Id
) 确保将正确的值写入将在数据库中创建的新员工行。
作为一般规则,始终尝试将控件(下拉列表、文本框等)绑定到模型的 属性。如果你这样做,你不需要编写特定的代码来做基本相同的事情。
我不知道这是否有帮助,但我制作了一个模型 class,它创建了多个列表,我将在整个应用程序中使用这些列表,其中一个列表如下所示:-
SKTDATABASEEntities db = new SKTDATABASEEntities(); public List
<Department>Departments { get { return db.Departments.ToList(); } }
我的 classes 名称是 ThingLists,然后我从那里在我的控制器 class 中将其实例化为:-
public ActionResult CreateTask() { ThingLists deps = new ThingLists(); var de = from t in deps.Departments select t.Department_Name; ViewData["depies"] = de;
并在我的视图中显示为:-
<label for="Task">Department</label>
<div class="editor-field">
<%: Html.DropDownList( "lsttasks", new SelectList((IEnumerable)ViewData[ "depies"], "Department"), new { id="drop1" })%>
<br />
</div>
这在显示我的下拉列表时非常有效,有人建议我使用 javascript 来分配选定的项目,例如:-
< script type = "text/javascript" >
function onSelectedIndexChanged(select) {
var text = $("drop1").valueOf();
document.getElementById('drop1').innerHTML = text;
} < /script>
在那部分我的控制器中仍然为 null 也许你可以从那里到某个地方。 :-) 我也在等待对我的问题的回应,但如果有人回应我会与你分享。
@oli_taz 使用我上面的代码和 viewdata 而不是 viewbag 我只需要将我的视图修改为
<%: Html.DropDownListFor(model=>model.Department,new SelectList((IEnumerable)ViewData["depies"], "Department")) %>
它从数据库 table "departments" 中获取值并填充在 thinglists.cs 中创建的列表,当我保存它时,它会将我选择的值准确保存到我的 "tasks" table.我希望我解释得足够清楚,我有点新。
我想要一个下拉列表,它从资格 table 中提取数据,然后在 HttpPost 上,它将下拉列表中选择的值存储到员工 table 的“资格”列中。我是 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)
<table>
<!-- other fields removed for sake of simplicity -->
<tr>
<td>
@Html.Label("Select Your Qualification:")
</td>
<td>
@Html.DropDownList("QualList", "--Select--")
</td>
</tr>
</table>
}
Table 结构:
Qualifications Table: Id, qual
Employee Table: Id, firstName, surName, gender, qualification
我的代码成功地从“Qualification”table 中获取数据,但没有post它到“employee”table 中的“qualification”列。
任何建议将不胜感激,谢谢!
您应该将下拉列表绑定到单击“保存”按钮时要返回的模型。
换句话说,这个:
@Html.DropDownList("QualList", "--Select--")
应该变成这样:
@Html.DropDownListFor(model => model.Qualification_Id, (SelectList)ViewBag.QualList)
Edit 正如 Stephen Muecke 指出的那样,您需要将 Viewbag 值转换为 SelectList
.
注意 DropDownListFor()
有多种可能性。为了清楚起见,我只选择了最简单的一个,但您可以添加可选标签等。
这会将它绑定到您的模型 (emp
):
public ActionResult CreateEmpResult(Employee emp)
注意:如果您的 Employee
class 设置正确并且具有所需的外键(link 到资格 table), 在你的 Employee
class 中应该已经有一个 .Qualification_Id
(或类似的名字) (假设 class 是你实际的数据库实体).
这些更改将涵盖您需要的一切:
- 下拉列表现在将所选值写入
emp.Qualification_Id
。 - 在您的控制器方法中,您将
emp
保存到数据库。 - EF 将使用 FK 字段 (
emp.Qualification_Id
) 确保将正确的值写入将在数据库中创建的新员工行。
作为一般规则,始终尝试将控件(下拉列表、文本框等)绑定到模型的 属性。如果你这样做,你不需要编写特定的代码来做基本相同的事情。
我不知道这是否有帮助,但我制作了一个模型 class,它创建了多个列表,我将在整个应用程序中使用这些列表,其中一个列表如下所示:-
SKTDATABASEEntities db = new SKTDATABASEEntities(); public List
<Department>Departments { get { return db.Departments.ToList(); } }
我的 classes 名称是 ThingLists,然后我从那里在我的控制器 class 中将其实例化为:-
public ActionResult CreateTask() { ThingLists deps = new ThingLists(); var de = from t in deps.Departments select t.Department_Name; ViewData["depies"] = de;
并在我的视图中显示为:-
<label for="Task">Department</label>
<div class="editor-field">
<%: Html.DropDownList( "lsttasks", new SelectList((IEnumerable)ViewData[ "depies"], "Department"), new { id="drop1" })%>
<br />
</div>
这在显示我的下拉列表时非常有效,有人建议我使用 javascript 来分配选定的项目,例如:-
< script type = "text/javascript" >
function onSelectedIndexChanged(select) {
var text = $("drop1").valueOf();
document.getElementById('drop1').innerHTML = text;
} < /script>
在那部分我的控制器中仍然为 null 也许你可以从那里到某个地方。 :-) 我也在等待对我的问题的回应,但如果有人回应我会与你分享。
@oli_taz 使用我上面的代码和 viewdata 而不是 viewbag 我只需要将我的视图修改为
<%: Html.DropDownListFor(model=>model.Department,new SelectList((IEnumerable)ViewData["depies"], "Department")) %>
它从数据库 table "departments" 中获取值并填充在 thinglists.cs 中创建的列表,当我保存它时,它会将我选择的值准确保存到我的 "tasks" table.我希望我解释得足够清楚,我有点新。