2011-04-16 24 views
43

Tengo una vista con un modelo de tipo Lista y quiero colocar una lista desplegable en la página que contiene todas las cadenas de la lista como elementos en el menú desplegable. Soy nuevo en MVC, ¿cómo lo lograría?ASP.NET MVC DropDownListFor con modelo de tipo Lista <string>

yo probamos este:

@model List<string> 
@Html.DropDownListFor(x => x) 

pero que arrojó un error. Cualquier ayuda es apreciada.

+3

@ Html.Dr opDownListFor (x => yourInputVariable, Model) debería funcionar –

Respuesta

112

hacer una lista desplegable que necesita dos propiedades:

  1. una propiedad a la que se unirá a (por lo general una propiedad escalar de tipo entero o cadena)
  2. una lista de elementos que contienen dos propiedades (uno de los valores y una para el texto)

En el caso de que sólo haya una lista de cadena que no puede ser explotado para crear una caída utilizable lista de abajo.

Mientras que para el número 2. puede tener el valor y el texto igual a lo que necesita una propiedad para enlazar. Se podría utilizar una versión flexible de tipos del ayudante:

@model List<string> 
@Html.DropDownList(
    "Foo", 
    new SelectList(
     Model.Select(x => new { Value = x, Text = x }), 
     "Value", 
     "Text" 
    ) 
) 

donde Foo será el nombre de la ddl y utilizado por el aglutinante modelo por defecto. Por lo que el marcado generado podría ser algo como esto:

<select name="Foo" id="Foo"> 
    <option value="item 1">item 1</option> 
    <option value="item 2">item 2</option> 
    <option value="item 3">item 3</option> 
    ... 
</select> 

Dicho esto una visión mucho mejor modelo para una lista desplegable es el siguiente:

public class MyListModel 
{ 
    public string SelectedItemId { get; set; } 
    public IEnumerable<SelectListItem> Items { get; set; } 
} 

y luego:

@model MyListModel 
@Html.DropDownListFor(
    x => x.SelectedItemId, 
    new SelectList(Model.Items, "Value", "Text") 
) 

y si desea preseleccionar alguna opción en esta lista, todo lo que necesita hacer es establecer la propiedad SelectedItemId de este modelo de vista en el correspondiente Value de alguna e lement en la colección Items.

+11

Esto no funciona, ¿cómo se obtiene el valor en los controladores Publicar ... SelectedItemId y los elementos son ambos nulos. – Marc

2

Si usted tiene una lista de tipo cadena que desee en una lista desplegable que hacer lo siguiente:

List<string> ShipNames = new List<string>(){"A", "A B", "A B C"}; 

@Html.DropDownListFor(x => x.ShipNames, new SelectList(Model.ShipNames), "Select a Ship...", new { @style = "width:500px" }) 

que da una lista desplegable de este modo:

<select id="ShipNames" name="ShipNames" style="width:500px"> 
    <option value="">Select a Ship...</option> 
    <option>A</option> 
    <option>A B</option> 
    <option>A B C</option> 
</select> 

Para llegar el valor en una publicación de controladores; si está utilizando un modelo (por ejemplo, MyViewModel) que tiene la Lista de cadenas como una propiedad, porque ha especificado x => x.ShipNames sólo tiene la firma del método como (porque va a ser serializado/deserialsed dentro del modelo):

MyActionName ActionResult pública (modelo MyViewModel)

Si lo que desea acceder a la lista desplegable en el poste entonces la firma se convierte en:

ActionResult pública MyActionName (ShipNames de cuerda)

+0

No estoy seguro de que esto funcione. para la publicación MyActionName (modelo MyViewModel), a qué propiedad se vinculará el elemento seleccionado. La propiedad ShipNames contiene la lista de valores seleccionables solamente. – RayLoveless

Cuestiones relacionadas