2010-03-07 35 views
8

Soy nuevo en ASP.NET MVC. Estoy tratando de averiguar cómo crear una lista desplegable básica de los valores en mi base de datos. En los formularios web ASP.NET, sé que puedo cargar una lista desplegable de esta manera:ASP.NET MVC - Complete una lista desplegable

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

Cómo Cómo hago el mismo tipo de cosas en ASP.NET MVC? ¡Gracias!

+0

Tome un vistazo a esta entrada del blog que explica todo: [Listas desplegables y ASP.NET MVC] (http://odetocode.com/Blogs/scott/archive/2010/01/18/drop-down-lists-and-asp-net-mvc.aspx) –

+0

como @LenielMacaferi sugests SelectList es tu amigo crear uno en el modelo de tu vista. – kenny

Respuesta

2

En MVC2, utilice <%=Html.DropListFor(x => x.MemberName, Model.DropListItems)%> en su opinión y en su controlador que pueblan DropListItems con un nuevo SelectList que contiene los elementos de la base de datos.

Creo que la muestra de Cena de Nerd incluye esto, y si eres nuevo en MVC realmente deberías atravesar y crear la aplicación Cena Nerd, porque aprendes mucho de ella, incluso si planeas no usa lo que usan.

8

Modelo

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

método de extensión

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

datos obtenidos de la base de datos

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

Ver

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

o mejor aún:

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

Tome un vistazo a esta entrada del blog que lo explica todo:

Drop-down Lists and ASP.NET MVC

+0

¿De dónde viene el modelo.AlbumId en este ejemplo? No veo 'AlbumId' definido en su modelo – dferraro

+0

@dferraro genial ... ¡ha encontrado un error! Acabo de abrir el enlace en la parte inferior de mi respuesta OTRA VEZ y vi que el autor agregó 'AlbumId' al' EditSongViewModel'. Cuando agregué mi respuesta hace 3 años esa cosa no estaba en el modelo y por supuesto debería ser. : D –

+0

@Lenial Macaferi gracias por aclarar. ¿Y qué representa el 'AlbumId' aquí? ¿Siempre representa el 'AlbumId seleccionado'? – dferraro

Cuestiones relacionadas