在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