我想有一个下拉列表,它从资格表中提取数据,然后在HttpPost上,它将下拉列表中选择的值存储到"资格"员工表上的列。我对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,qual
员工表:Id,firstName,surName,性别,资格
我的代码成功获取了&#34; Qualification&#34;表格,但没有将其发布到&#34;资格&#34; &#34;员工&#34;中的列表
非常感谢任何建议,谢谢!
答案 0 :(得分:2)
您应该将下拉列表绑定到您单击“保存”按钮时返回的模型。
换句话说,这个:
@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_Id
(或Employee
类中的类似名称(假设该类是您的实际数据库实体)。
这些更改将涵盖您需要的所有内容:
emp.Qualification_Id
。emp
保存到数据库。emp.Qualification_Id
)来确保将在将在数据库中创建的新Employee行中写入正确的值。作为一般规则,始终尝试将控件(下拉列表,文本框,...)绑定到模型的属性。如果你这样做,你就不需要编写特定的代码来完成相同的工作。
答案 1 :(得分:0)
我不知道这是否会有所帮助但是我创建了一个模型类,它创建了多个列表,我将在整个应用程序中使用其中一个列表: -
SKTDATABASEEntities db = new SKTDATABASEEntities(); public List
<Department>Departments { get { return db.Departments.ToList(); } }
我的类名是ThingLists,然后从那里我在我的控制器类中实例化它: -
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,也许你可以从那里到达某个地方。 :-)我还在等待对我的问题的回复,但如果有人回复我将与你分享的内容。
答案 2 :(得分:0)
@oli_taz使用上面的代码和viewdata而不是viewbag我只需修改我的视图
<%: Html.DropDownListFor(model=>model.Department,new SelectList((IEnumerable)ViewData["depies"], "Department")) %>
&#13;
它从数据库表&#34;部门&#34;获取值。并填充在thinglists.cs中创建的列表,当我保存它时,将我选择的值保存到我的&#34; tasks&#34;表。我希望我把它解释得很清楚。