ASP.NET MVC - 从下拉列表中选择值作为模型

时间:2013-01-17 07:07:37

标签: asp.net-mvc razor asp.net-mvc-viewmodel

我想知道是否有办法从下拉列表选择中提取模型。例如:

我的视图绑定到模型Employee,而Employee类有一个属性'Department',它是另一个具有自己属性的类:

我的员工查看模型

public class Employee
{
public string EmployeeName{get;set;}
public Department EmployeeDepartment{get;set;}
public List<Department> AvailableDepartments {get;set;}
}

部门模型:

public class Department
{
public string Code{get;set}
public string Name{get;set;}
public string Description{get;set;}
}

在我查看输入员工详细信息的位置,我使用下拉列表让用户选择员工部门。

@Html.DropDownListFor(
m => m.EmployeeDepartment, 
new SelectList(@Model.AvailableDepartments , "Code", "Name")
)

当我提交表单时,我在控制器上获得了一个'Employee Class'实例,但显然EmployeeDepartment属性为null。

我知道如果我添加一个字符串属性'EmployeeDepartmentCode'并将其映射到下拉列表,它将起作用。但有没有什么方法可以填充Department模型属性而不是使用字符串属性? - 因为此视图模型也用于显示员工部门名称的网格中。

1 个答案:

答案 0 :(得分:1)

好吧,如果您的EmployeeDepartment类型如下:

public class EmployeeDepartment {
  public int ID { get; set; }
  // + other properties
}

然后您可以将剃刀代码更改为:

@Html.DropDownListFor(
  m => m.EmployeeDepartment.ID, 
  new SelectList(@Model.AvailableDepartments , "Code", "Name")
)

然后,当您再次收到模型时,模型将包含一个非空EmployeeDepartment并设置ID。

但是,我想你问是否可以让模型绑定器自动从数据库中获取剩余的记录并填写剩下的数据?如果是这样,这是一个更复杂的问题 - 但您可以轻松地在控制器中修补它。