C# – ASP.NET MVC – Populate a drop down list

asp.net-mvccdrop-down-menupopulate

I'm new to ASP.NET MVC. I'm trying to figure out how create a basic drop down list from values in my database. In ASP.NET web forms, I know I can load a drop down list like this:

Page.aspx

<asp:DropDownList ID="myDropDownList" runat="server" DataTextField="FullName" DataValueField="ID" OnLoad="myDropDownList_Load" />

Page.aspx.cs

void myDropDownList_Load(object sender, EventArgs e)
{
  if (Page.IsPostBack == false)
  {
    List<Person> people = GetPeopleFromDatabase();
    myDropDownList.DataSource = people;
    myDropDownList.DataBind();
  }
}

How do I do the same type of thing in ASP.NET MVC? Thank you!

Best Answer

Model

public class EditSongViewModel
{        
    public int AlbumId { get; set; }
    public string Title { get; set; }                
    public int TrackNumber { get; set; }
    public IEnumerable<SelectListItem> Albums { get; set; }
}

Extension method

public static IEnumerable<SelectListItem> ToSelectListItems(
              this IEnumerable<Album> albums, int selectedId)
{
    return 
        albums.OrderBy(album => album.Name)
              .Select(album => 
                  new SelectListItem
                  {
                    Selected = (album.ID == selectedId),
                    Text = album.Name,
                    Value = album.ID.ToString()
                   });
}

Getting data from database

model.Albums = _repository.FindAllAlbums().ToSelectItems(selectedId);

View

@Html.DropDownList("AlbumId", Model.Albums)

or better yet:

@Html.DropDownListFor(model => model.AlbumId, Model.Albums)

Take a look at this blog post that explains it all:

Drop-down Lists and ASP.NET MVC