2012-04-18 11 views
3

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

答えて

2

であるということである問題があなたのEmployeeDropUsedアクションがidというパラメータとパラメータあなたを探しているということです。私はDropDownListForと、モデル内の社員のプロパティを使用してみましたそれはEmployeeIdです。 EmployeeDropUsedアクションのパラメータ名をemployeeIdに変更するか、のEmployeeIdプロパティをidに変更してください。

あなたがTaskModelプロパティを変更する場合、これは動作するはずです:あなたはEmployeeDropUsedパラメータを変更した場合

@Html.DropDownListFor(m => m.id, Model.Employees, "Select Employee") 

が、これは動作するはずです:

@Html.DropDownListFor(m => m.EmployeeId, Model.Employees, "Select Employee") 
+0

大きくてはなりません!すべてのIDをEmployeeIdに変更すると、それは機能します。私はまだ本当になぜ、得ることはありませんが、ありがとう! – AGuyCalledGerald

+0

MVCでのデフォルトのModel Bindingは、フォーム値、ルート値、およびクエリ文字列値を取得し、アクション内のパラメータにマップします。それが正しく機能するためには、すべての名前が一致しなければなりません。この状況では、ビューはEmployeeIdという名前のフォーム値を作成していました。 ModelBindingはEmployeeIdという名前のアクションでパラメータを見つけられなかったため、無視しました。フォームの値と一致するようにパラメータの名前を変更すると、それが検出され、設定されました。ここでモデルバインディングの上品な記事です:http://dotnetslackers.com/articles/aspnet/Understanding-ASP-NET-MVC-Model-Binding.aspx –

5

はそのラムダ式はしかし間違っていませんか?それは

@Html.DropDownListFor(m => m.EmployeeId .... 

代わりの

@Html.DropDownListFor(m => Model.EmployeeId 
+0

良いキャッチは、私がコピーされたときにその部分に注意を払っていなかった/質問から貼り付ける。 –

関連する問題