[英]MVC Populating Dropdown from Database
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:表達式樹可能不包含動態操作
您不應該將IEnumerable
轉換為SelectList
您需要為其創建一個新實例:
<%= Html.DropDownListFor(x => x.SelectedEmployee, new SelectList(Model.Employees)) %>
更新。 盡管上面的注釋成立,但實際問題卻是動態鍵入的視圖。 這樣的視圖不允許在助手中使用lambda,例如x => x.SelectedEmployee
。 因此,該問題的實際解決方案是使視圖的輸入類型為:
Inherits="System.Web.Mvc.ViewPage<Namespace.EmployeeDetailsModel>
由於Employees
是IEnumerable<SelectListItem>
,因此您無需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);
}
ToList應該移到語句的末尾:
model.Employees = _db.geo_employees.Select(x => new SelectListItem
{
Value = x.name,
Text = x.name
}).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.