MVC填充数据库下拉列表

时间:2014-03-20 15:08:12

标签: c# asp.net-mvc

MVC的新手试图填充数据库的下拉列表,证明比我想象的更棘手。

这就是我所拥有的。

public class EmployeeDetailsModel
{
    public string SelectedEmployee { get; set; }
    public IEnumerable<SelectListItem> Employees { get; set; }
}

控制器

public ActionResult MiEmployeeDetails()
{
  var model = new EmployeeDetailsModel();
  model.Employees = _db.geo_employees.ToList().Select(x => new SelectListItem
   {
      Value = x.name,
      Text = x.name
   });

   return View(model);
}

查看

<%= Html.DropDownListFor(x => x.SelectedEmployee, (SelectList) Model.Employees) %>

但是得到了错误

  

CS1963:表达式树可能不包含动态操作

3 个答案:

答案 0 :(得分:3)

您不应该将IEnumerable强制转换为SelectList - 您需要创建一个新实例:

<%= Html.DropDownListFor(x => x.SelectedEmployee, new SelectList(Model.Employees)) %>

更新。虽然上面的评论成立,但实际问题仍然是动态类型化视图。此类视图不允许在帮助程序中使用lambdas,例如x => x.SelectedEmployee。因此问题的实际解决方案是使视图格式化:

Inherits="System.Web.Mvc.ViewPage<Namespace.EmployeeDetailsModel>

答案 1 :(得分:0)

由于EmployeesIEnumerable<SelectListItem>,您不需要投放它或创建new SelectList(),您可以直接使用它。

我还怀疑你错过了.ToList()

public ActionResult MiEmployeeDetails()
{
  var model = new EmployeeDetailsModel();
  model.Employees = _db.geo_employees.ToList().Select(x => new SelectListItem
   {
      Value = x.name,
      Text = x.name
   }).ToList();

   return View(model);
}

答案 2 :(得分:0)

ToList应该移到语句的末尾:

model.Employees = _db.geo_employees.Select(x => new SelectListItem
{
   Value = x.name,
   Text = x.name
}).ToList();