Asp.net mvc 5 从数据库实体MVC5创建下拉列表

Asp.net mvc 5 从数据库实体MVC5创建下拉列表,asp.net-mvc-5,dropdownbox,Asp.net Mvc 5,Dropdownbox,我想根据db实体的内容创建一个下拉列表。 这似乎是一个足够简单的概念,但我似乎不能真正确定下来 这是我的密码: 模型 控制器 public ActionResult Index() { // HAVE TRIED THESE THREE // #1 var EscQry = from d in db.Escuelas select d.Nombre; var escuelas = new SelectList(EscQry, "ID"

我想根据db实体的内容创建一个下拉列表。 这似乎是一个足够简单的概念,但我似乎不能真正确定下来

这是我的密码:

模型

控制器

public ActionResult Index()
{
    // HAVE TRIED THESE THREE

    // #1
    var EscQry = from d in db.Escuelas
              select d.Nombre;
    var escuelas = new SelectList(EscQry, "ID", "Nombre");
    ViewData["esc"] = escuelas;

    // #2
    var escuelas = new SelectList(from d in db.Escuelas
        select new SelectListItem { Text = d.Nombre, Value = d.ID.ToString() });
    ViewData["esc"] = escuelas;

    // #3
    IEnumerable<Escuela> model = from p in db.Escuelas
        select new Escuela { Nombre = p.Nombre };


   // #1
   return View();

   // #2
   return View();

   // #3
   return View(model);
}
看法

我得到这个错误

没有“IEnumerable”类型的ViewData项具有键“Escuelas”


我将根据需要在视图中显示的属性,创建域类的视图模型

public class EscuelaViewModel
{  
    public int ID { get; set; }
    public string Nombre { get; set; }
    public int PuestoID { get; set; }
    .............. etc.

    public Collection<SelectListItem> Escuelas {get; set;}
    private static Collection<SelectListItem> CreateEscuelasOptions(string selectedOption == "")
    {
        var model = from p in db.Escuelas select new Escuela { Number = p.Nombre, Id= p.Id };
        var options = new Collection<SelectListItem>();

        foreach(var esc in model)
            options.Add(new SelectListItem {Value = esc.Id, Text = esc.Number, Selected = selectedOption.Equals(esc.Number)});

        return options;
    } 

    public void LoadViewData()
    {
        Escuelas = CreateEscuelasOptions(Nombre);
    }
}
以及以下观点:

@model EscuelaViewModel
@{
    ViewBag.Title = "Home Page";
}
@Html.DropDownListFor(x => x.Nombre, Model.Escuelas, --Select option--)
该错误表示ViewData[esc]为空。调试代码。在任何情况下,TypeOfEscuela似乎不包含名为Escuelas的属性,因此不确定要绑定到什么。
public class EscuelaViewModel
{  
    public int ID { get; set; }
    public string Nombre { get; set; }
    public int PuestoID { get; set; }
    .............. etc.

    public Collection<SelectListItem> Escuelas {get; set;}
    private static Collection<SelectListItem> CreateEscuelasOptions(string selectedOption == "")
    {
        var model = from p in db.Escuelas select new Escuela { Number = p.Nombre, Id= p.Id };
        var options = new Collection<SelectListItem>();

        foreach(var esc in model)
            options.Add(new SelectListItem {Value = esc.Id, Text = esc.Number, Selected = selectedOption.Equals(esc.Number)});

        return options;
    } 

    public void LoadViewData()
    {
        Escuelas = CreateEscuelasOptions(Nombre);
    }
}
public ActionResult Index()
{
    var EscuelaViewModel = new EscuelaViewModel();
    EscuelaViewModel.LoadViewData();

    return View(EscuelaViewModel); 
}
@model EscuelaViewModel
@{
    ViewBag.Title = "Home Page";
}
@Html.DropDownListFor(x => x.Nombre, Model.Escuelas, --Select option--)