如何在控制器中获取Html.DropDownList的值?

时间:2017-07-09 12:04:10

标签: asp.net-mvc razor html-select

我在控制器中分配了以下viewbag

public ActionResult new_vehicle()
    {
        ViewBag.customers = new SelectList(db.customers, "cust_id", "cust_name");
        return View(db.vehicles.ToList());
    }

并且视图中的代码是

 @Html.DropDownList("customers", "Select Customer");

添加功能的代码是

public ActionResult veh_AddEdit()
    {
        int id = Convert.ToInt32(Request["vehiddenID"]);
        if (id == 0)
        {

            vehicle veh = new vehicle();
            Session["veh_id"] = "";

            veh.cust_id_fk = Convert.ToInt32(Request.Form["customers"]);
            veh.veh_make = Request["vemake"];
            veh.veh_name = Request["vename"];
            veh.veh_model = Request["vemodel"];
            db.vehicles.Add(veh);
            db.SaveChanges();
            int latestEmpId = veh.veh_id;
        }

        return RedirectToAction("new_vehicle");
    }

问题是它没有获得所选的值,即控制器中的外键。

2 个答案:

答案 0 :(得分:1)

在您的控制器中,您可以传递viewbag IEnumerable<SelectListItem>

public ActionResult new_vehicle()
{
    ViewBag.customers = db.customers.Select(i=>new SelectListItem() { Text = i.cust_name, Value=i.cust_id });
    return View(db.vehicles.ToList());
}

然后在您的视图中,您可以像这样呈现下拉列表

@Html.DropDownList("customers", (IEnumerable<SelectListItem>)ViewBag.customers, "Select Customer")

然后在方法veh_AddEdit的控制器中,您可以像Request["customers"]

一样访问它

答案 1 :(得分:0)

我希望你从胜利者的答案中得到解决方案,在这里我想提供更多的信息,希望它有助于更​​好地理解

在一般的Html表单中,将使用键值对将值发送到控制器。因此,对于下拉列表名称将是键,并且值将是用户被选中的值。

要检查一旦为下拉列表呈现html,只需转到浏览器中的视图页面源并获取控件的名称以在操作方法中使用它。

例如:

public ActionResult veh_AddEdit(string customers)
    {
        int id = Convert.ToInt32(Request["vehiddenID"]);
        if (id == 0)
        {

            vehicle veh = new vehicle();
            Session["veh_id"] = "";

            veh.cust_id_fk = Convert.ToInt32(customers);
            veh.veh_make = Request["vemake"];
            veh.veh_name = Request["vename"];
            veh.veh_model = Request["vemodel"];
            db.vehicles.Add(veh);
            db.SaveChanges();
            int latestEmpId = veh.veh_id;
        }

        return RedirectToAction("new_vehicle");
    }