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:表达式树可能不包含动态操作
答案 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)
由于Employees
是IEnumerable<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();