簡體   English   中英

MVC從數據庫填充下拉列表

[英]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>

由於EmployeesIEnumerable<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM