从数据库中填充MVC

本文关键字:MVC 填充 数据库 | 更新日期: 2023-09-27 17:51:10

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:表达式树不能包含动态操作

从数据库中填充MVC

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

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

更新。虽然上面的注释成立,但实际的问题是动态类型视图。这样的视图不允许在helper中使用lambdas,比如上面提到的x => x.SelectedEmployee。所以这个问题的实际解决方案是使视图强类型:

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

因为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);
}

ToList应移至语句末尾:

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