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。我错过了什么?我猜这与我如何填写下拉列表有关?无论如何,一如既往,提前感谢
下拉列表的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)