id未通过(MVC下拉列表+视图数据选择列表)

本文关键字:数据 视图 选择 列表 下拉列表 MVC id | 更新日期: 2023-09-27 18:20:57

我的视图:

@using (Html.BeginForm("Index", "Person"))
{
    @Html.DropDownList("Departments",ViewData["Departments"] as SelectList)
    <button type="submit">Select</button>
}

我的部门主管:

 public ActionResult Index()
        {
            ViewData["Departments"] = new SelectList(db.Departments, "ID", "Name");
            return View();
        }

我的PersonController

 public ActionResult Index(string id = null)
        {
            if (id != null)
            {
            //Return list of persons with department id
            }
          return View();
        }

我的问题:当我从下拉列表中选择一个部门并按下按钮时,它会很好地重定向,但不会传递id。我错过了什么?我猜这与我如何填写下拉列表有关?无论如何,一如既往,提前感谢

id未通过(MVC下拉列表+视图数据选择列表)

下拉列表的name属性不是"id",因此MVC模型绑定器无法绑定它。将html属性new{@Name='id'}添加到您的DropDown定义中,它应该可以工作。

我还建议您的视图接收一个模型——在这种情况下,模型绑定会容易得多,您可以使用DropDownFor助手。

使用模型还可以避免使用不推荐使用的ViewData和ViewBag容器,因为它们不是强类型的,所以如果您在视图中错误地写入ViewData["Departments"],您不会因为拼写错误而出现编译错误,但显然它不起作用。

相反,你可以定义一个模型

public class Person
{
    public SelectList Departments {get; set;}
    public int SelectedDepatrmentId {get; set;}
    //Other person properties come here
}

在你看来,你唯一应该做的就是:

@model path to your Person class
@Html.DropDownListFor(model => model.SelectedDepatrmentId, Model.Departments)

在您的案例中,mvc模型绑定是用name属性完成的,而@Html.DropDownList("Departments"...将使用名为'Departments'的下拉列表来呈现html,所以请尝试我的第一个答案,或者更改@Html.DropDownList("Departments"...,如我的第二个答案所示。

试试这个:

public ActionResult Index(string Departments) // <------ Use 'Departments' here instead of 'id'
 {
    .....
    return View();
 }

或将dropdownlist更改为:

  @Html.DropDownList("id",ViewData["Departments"] as SelectList)