2012-04-18 69 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();" 
     }) 
} 

我有一個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

回答

2

的問題是,你的EmployeeDropUsed行動正在尋找一個名爲id的參數和參數你發送它是EmployeeId。請將EmployeeDropUsed操作上的參數名稱更改爲employeeId,或將TaskModel上的EmployeeId屬性更改爲id

如果更改TaskModel屬性這應該工作:

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

如果更改EmployeeDropUsed參數這應該工作:

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

太好了!如果我將所有ID更改爲EmployeeId,它就可以工作。我仍然不明白爲什麼,但謝謝! – AGuyCalledGerald 2012-04-18 14:01:51

+0

MVC中的默認模型綁定採用表單值,路由值和查詢字符串值,並將它們映射到您的操作中的參數。爲了正常工作,名稱必須匹配。在這種情況下,您的視圖正在創建一個名爲EmployeeId的表單值。模型綁定在名爲EmployeeId的操作中沒有找到任何參數,所以它忽略了它。一旦您將參數重命名爲與表單值匹配,就會找到併爲您設置。這裏是一個體面的文章模型綁定:http://dotnetslackers.com/articles/aspnet/Understanding-ASP-NET-MVC-Model-Binding.aspx – 2012-04-18 14:16:32

5

是不是lambda表達式不正確有關係嗎?它不應該是

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

,而不是

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

好抓住,當我被複制時沒有注意到那部分/從問題粘貼。 – 2012-04-18 14:30:51

相關問題