我的观点:
@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();
}
我的问题: 当我从DropDown中选择一个部门并按下按钮时,它会重定向,但不会传递id。 我错过了什么?我猜它与我如何填充DropDownList有关? 无论如何,一如既往地提前谢谢
答案 0 :(得分:4)
您的下拉列表的name属性不是&#34; id&#34;所以MVC模型绑定器不能绑定它。 将html属性new {@Name =&#39; id&#39;}添加到您的DropDown定义中,它应该可以正常工作。
我还建议你的视图接收一个模型 - 在这种情况下,模型绑定会更容易,你可以使用DropDownFor帮助。
使用模型还可以避免使用不推荐使用的ViewData和ViewBag容器,因为它们没有强类型,所以如果您错误地在View中找到了ViewData [&#34; Departnents&#34;],那么因为拼写错误而得到编译错误,但很明显它不会起作用。
相反,您可以定义模型
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)
答案 1 :(得分:1)
在您的情况下使用名称属性和@Html.DropDownList("Departments"...
完成mvc模型绑定的问题将使用名称为'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)