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

时间:2015-03-11 11:04:20

标签: c# asp.net-mvc model-view-controller drop-down-menu

我想有一个下拉列表,它从资格表中提取数据,然后在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;中的列表

非常感谢任何建议,谢谢!

3 个答案:

答案 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保存到数据库。
  • EF将使用FK字段(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我只需修改我的视图

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

它从数据库表&#34;部门&#34;获取值。并填充在thinglists.cs中创建的列表,当我保存它时,将我选择的值保存到我的&#34; tasks&#34;表。我希望我把它解释得很清楚。