Tengo una vista con un modelo de tipo List<string> y quiero colocar una lista desplegable en la página que contiene todas las cadenas de la lista de elementos en la lista desplegable. Soy nuevo en MVC, ¿cómo puedo lograr esto?

He intentado esto:

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

pero que tiró un error.

  • yourInputVariable,Modelo) debería funcionar
InformationsquelleAutor Chev | 2011-04-16

3 Comentarios

  1. 120

    A hacer una lista desplegable que se necesitan dos propiedades:

    1. una propiedad a la que se le unen (normalmente una propiedad escalar de tipo integer o string)
    2. una lista de elementos que contiene dos propiedades (uno de los valores y una para el texto)

    En tu caso, sólo tienes una lista de cadenas que no puede ser explotado para crear un utilizable de la lista desplegable.

    Mientras que para el número 2. usted podría tener el valor y el texto será el mismo que necesita de una propiedad a enlazar. Usted podría utilizar un tipo débil de la versión de la ayuda:

    @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 utilizada por el modelo predeterminado de cuaderno. Así que el generado marcado 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>

    Esto se dice una vista 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 usted quiere seleccionar alguna opción en esta lista de todo lo que usted necesita hacer es establecer la SelectedItemId de la propiedad de este modelo de vista a la correspondiente Value de algún elemento en el Items colección.

    • Esto no es trabajo, ¿cómo se obtiene el valor de los controladores de Post… SelectedItemId y Elementos son nulos.
    • Esta solucionado mi problema
  2. 4

    Si usted tiene una Lista de tipo cadena que desea de la lista desplegable hago lo siguiente:

    EDICIÓN: Aclaró, lo que es un ejemplo más completo.

    public class ShipDirectory
    {
        public string ShipDirectoryName { get; set; }
        public List<string> ShipNames { get; set; }
    }
    
    ShipDirectory myShipDirectory = new ShipDirectory()
    {
        ShipDirectoryName = "Incomming Vessels",
        ShipNames = new List<string>(){"A", "A B", "A B C"},
    }
    
    myShipDirectory.ShipNames.Add("Aunt Bessy");
    
    @Html.DropDownListFor(x => x.ShipNames, new SelectList(Model.ShipNames), "Select a Ship...", new { @style = "width:500px" })

    Que da una lista desplegable, así:

    <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 obtener el valor de una controladores post; si usted está usando un modelo (por ejemplo, MyViewModel) que tiene la Lista de las cuerdas, como una propiedad, porque ha especificado x => x.ShipNames simplemente tiene la firma del método como (porque va a ser serializado/deserialsed dentro del modelo):

    public ActionResult MyActionName(MyViewModel modelo)

    Si usted sólo quiere acceder a la lista desplegable en el post, a continuación, la firma se convierte en:

    public ActionResult MyActionName(cadena ShipNames)

    • No estoy seguro de que esto funciona. para el post MyActionName(MyViewModel modelo), lo que la propiedad será el elemento seleccionado enlazarse. ShipNames propiedad contiene la lista de seleccionables sólo valores.
    • Esto funciona muy bien y es mucho más sencillo que el de mayor respuesta. @RayLoveless Después de la publicación, el modelo debe contener una propiedad/valor como modelo».ShipNames = A».
  3. 0

    Me doy cuenta de que esta pregunta se hizo hace mucho tiempo, pero yo he venido aquí en busca de respuestas y no estaba satisfecho con cualquier cosa que pudiera encontrar. Finalmente encontré la respuesta aquí:

    https://www.tutorialsteacher.com/mvc/htmlhelper-dropdownlist-dropdownlistfor

    Para obtener los resultados de la forma, el uso de la FormCollection y, a continuación, tire de cada valor individual por es el nombre del modelo así:

    yourRecord.FieldName = Request.Form["FieldNameInModel"];

    Tan lejos como pude decirle que no hace ninguna diferencia lo que argumento nombre del FormCollection – Solicitud de uso.Formulario[«NameFromModel»] para recuperarlo.

    No, yo no cavar hacia abajo para ver cómo th4e magia funciona bajo las sábanas. Solo sé que funciona…

    Espero que esto ayude a alguien a evitar las horas que pasé tratando de diferentes enfoques antes de que yo tengo trabajo.

Dejar respuesta

Please enter your comment!
Please enter your name here