В приложении 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());
}
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; }
}
Проблема в том, я не знаю, как чтобы получить выбранное значение от возврата к контроллеру. Я попытался с помощью DropDownListFor и свойство EmployeeID в модели:
@Html.DropDownListFor(m => Model.EmployeeId, Model.Employees, "Select Employee")
public int EmployeeId { get; set; }
Результат является то, что идентификатор всегда равен 0.
Отлично! Если я изменю идентификатор на EmployeeId, он будет работать. Я все еще не понимаю почему, но спасибо! – AGuyCalledGerald
По умолчанию привязка модели в MVC принимает значения формы, значения маршрута и значения строки запроса и сопоставляет их с параметрами в ваших действиях. Для правильной работы имена должны совпадать. В этой ситуации ваше представление создавало значение формы с именем EmployeeId. При привязке к модели не было найдено ни одного параметра для действия с именем EmployeeId, поэтому он игнорировал его. Как только вы переименовали параметр, чтобы соответствовать значению формы, он нашел его и установил для вас. Вот достойная статья о привязке модели: http://dotnetslackers.com/articles/aspnet/Understanding-ASP-NET-MVC-Model-Binding.aspx –