Asp.net mvc 3 从HTML.DropDownList返回控制器(.Net MVC)的选定值
在MVC应用程序中,我有一个显示任务的视图。任务应按分配给他们的员工进行筛选。员工将显示在下拉列表中Asp.net mvc 3 从HTML.DropDownList返回控制器(.Net MVC)的选定值,asp.net-mvc-3,Asp.net Mvc 3,在MVC应用程序中,我有一个显示任务的视图。任务应按分配给他们的员工进行筛选。员工将显示在下拉列表中 @using (Html.BeginForm("EmployeeDropUsed", "Task", new { id = ?? })) { @Html.DropDownList( "EmployeeDrop", new SelectList(Model.Employees, "Id", "EmployeeName"), "Select employee",
@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();"
})
}
我有一个带有ActionResult的TaskController,从表单中获取数据:
[HttpPost]
public ActionResult EmployeeDropUsed(int id)
{
Employee e = er.GetById(id);
return LoadControls(er.GetAll(), e.Tasks.ToList());
}
ViewModel如下所示
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; }
}
结果是id始终为0。问题是您的
EmployeeDropUsed
操作正在查找名为id
的参数,并且您发送它的参数是EmployeeId
。将EmployeeDropUsed
操作上的参数名称更改为employeeId
,或将TaskModel
上的employeeId
属性更改为id
如果更改了TaskModel
属性,则应该可以:
@Html.DropDownListFor(m => m.id, Model.Employees, "Select Employee")
@Html.DropDownListFor(m => m.EmployeeId, Model.Employees, "Select Employee")
如果您更改EmployeeDropUsed
参数,则该参数应起作用:
@Html.DropDownListFor(m => m.id, Model.Employees, "Select Employee")
@Html.DropDownListFor(m => m.EmployeeId, Model.Employees, "Select Employee")
但是,lambda表达式不是不正确吗?难道不是吗
@Html.DropDownListFor(m => m.EmployeeId ....
而不是
@Html.DropDownListFor(m => Model.EmployeeId
伟大的如果我将所有id更改为EmployeeId,它会起作用。我还是不明白为什么,但是谢谢!MVC中的默认模型绑定采用表单值、路由值和查询字符串值,并将它们映射到操作中的参数。要使其正常工作,所有名称都必须匹配。在这种情况下,您的视图正在创建一个名为EmployeeId的表单值。模型绑定在名为EmployeeId的操作上找不到任何参数,因此将其忽略。重命名参数以匹配表单值后,它会找到它并为您进行设置。这里有一篇关于模型绑定的不错的文章:很好,当我从问题中复制/粘贴时,我并没有注意到这一部分。