8

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!

2
  • Take a look at this blog post that explains it all: Drop-down Lists and ASP.NET MVC Commented Mar 7, 2010 at 17:09
  • as @LenielMacaferi sugests SelectList is your friend create one in you view's model. Commented Jul 15, 2012 at 14:59

2 Answers 2

8

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

Sign up to request clarification or add additional context in comments.

5 Comments

where does model.AlbumId come from in this example? I don't see 'AlbumId' defined on your model
@dferraro great... you found an error! Just opened the link in the bottom of my answer AGAIN and saw that the author added AlbumId to the EditSongViewModel. When I added my answer 3 years ago that thingy was not in the model and of course it should be. :D
@Lenial Macaferi thank you for clarifying. And what does the 'AlbumId' represent here? Does it always represent the 'selected AlbumId'?
@dferraro: Exactly. It's the backing field that holds the selected AlbumId from the dropdown.
Is it a good idea to use UI classes like SelectListItem in the Controller?
2

In MVC2, use <%=Html.DropListFor(x => x.MemberName, Model.DropListItems)%> in your view and in your controller you populate DropListItems with a new SelectList containing the items from the database.

I belive that the Nerd Dinner-sample includes this, and if you're new to MVC you should really really go through and create the Nerd Dinner app, because you learn so much from it, even if you plan to not use what they use.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.