在MVC应用程序中,我有一个显示任务的视图。这些任务应由其所分配的员工过滤。员工将显示在下拉列表中。从HTML.DropDownList中获取选定值返回给控制器(.Net MVC)
@using (Html.BeginForm("EmployeeDropUsed", "Task", new { id = ?? }))
{
@Html.DropDownList(
"EmployeeDrop", new SelectList(Model.Employees, "Id", "EmployeeName"), "Select employee",
new
{
onchange = @"
var form = document.forms[0];
form.submit();"
})
}
我有一个TaskController有一个ActionResult,从形式获取数据:
[HttpPost]
public ActionResult EmployeeDropUsed(int id)
{
Employee e = er.GetById(id);
return LoadControls(er.GetAll(), e.Tasks.ToList());
}
视图模型看起来像这样
public class TaskModel
{
public TaskModel(List<Employee> employees, List<Task> tasks)
{
Employees = employees;
Tasks = tasks;
}
public List<Task> Tasks { get; set; }
public List<Employee> Employees { get; set; }
}
是我不的问题知道如何将选定的值从回退到控制器。我试图在模型中使用DropDownListFor和雇员属性:
@Html.DropDownListFor(m => Model.EmployeeId, Model.Employees, "Select Employee")
public int EmployeeId { get; set; }
结果是ID始终是0
太好了!如果我将所有ID更改为EmployeeId,它就可以工作。我仍然不明白为什么,但谢谢! – AGuyCalledGerald 2012-04-18 14:01:51
MVC中的默认模型绑定采用表单值,路由值和查询字符串值,并将它们映射到您的操作中的参数。为了正常工作,名称必须匹配。在这种情况下,您的视图正在创建一个名为EmployeeId的表单值。模型绑定在名为EmployeeId的操作中没有找到任何参数,所以它忽略了它。一旦您将参数重命名为与表单值匹配,就会找到并为您设置。这里是一个体面的文章模型绑定:http://dotnetslackers.com/articles/aspnet/Understanding-ASP-NET-MVC-Model-Binding.aspx – 2012-04-18 14:16:32