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();"
})
}
私は、フォームからデータを取って、のActionResultとTaskControllerを持っている: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; }
}
のように見えます
[HttpPost]
public ActionResult EmployeeDropUsed(int id)
{
Employee e = er.GetById(id);
return LoadControls(er.GetAll(), e.Tasks.ToList());
}
問題は、私は方法を知っているドントですドロップから選択した値をコントローラに戻します。
@Html.DropDownListFor(m => Model.EmployeeId, Model.Employees, "Select Employee")
public int EmployeeId { get; set; }
結果はidは常に0
大きくてはなりません!すべてのIDをEmployeeIdに変更すると、それは機能します。私はまだ本当になぜ、得ることはありませんが、ありがとう! – AGuyCalledGerald
MVCでのデフォルトのModel Bindingは、フォーム値、ルート値、およびクエリ文字列値を取得し、アクション内のパラメータにマップします。それが正しく機能するためには、すべての名前が一致しなければなりません。この状況では、ビューはEmployeeIdという名前のフォーム値を作成していました。 ModelBindingはEmployeeIdという名前のアクションでパラメータを見つけられなかったため、無視しました。フォームの値と一致するようにパラメータの名前を変更すると、それが検出され、設定されました。ここでモデルバインディングの上品な記事です:http://dotnetslackers.com/articles/aspnet/Understanding-ASP-NET-MVC-Model-Binding.aspx –