从db实体MVC5创建DropDown列表

时间:2015-02-15 08:02:39

标签: asp.net-mvc-5 dropdownbox

我想根据db实体的内容创建一个下拉列表。 这似乎是一个简单的概念,但我似乎无法确定它。

这是我的代码:

MODEL

public partial class Escuela
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Escuela()
    {
        this.Empleadoes = new HashSet<Empleado>();
    }
    public int ID { get; set; }
    public string Nombre { get; set; }
    public int PuestoID { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Empleado> Empleadoes { get; set; }
    public virtual Puesto Puesto { get; set; }
}

public partial class ESCUELAEntities : DbContext
{
    public ESCUELAEntities()
        : base("name=ESCUELAEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
    public virtual DbSet<Alumno> Alumnoes { get; set; }
    public virtual DbSet<Empleado> Empleadoes { get; set; }
    public virtual DbSet<Escuela> Escuelas { get; set; }
    public virtual DbSet<Grupo> Grupoes { get; set; }
    public virtual DbSet<Puesto> Puestoes { get; set; }
}

CONTROLLER

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

查看

@model IEnumerable<_3E_III.Models.Escuela>
@{
    ViewBag.Title = "Home Page";
}
    @Html.DropDownList("Escuelas", ViewData["esc"] as List<SelectListItem>)

我收到此错误。

  

没有类型&#39; IEnumerable&#39;的ViewData项目。有关键的&#39; Escuelas&#39;。

1 个答案:

答案 0 :(得分:0)

我会根据我需要在视图中显示的属性来制作域类的视图模型。

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

然后,在Controller中:

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--)