Saltar al contenido

Agregar SelectListItem manualmente a SelectList para usar en DropDownListFor

Entiende el código bien antes de usarlo a tu trabajo si tquieres aportar algo puedes comentarlo.

Solución:

El problema es ese SelectList(IEnumerable) el constructor no acepta SelectListItem‘s (al menos no como SelectListItem para agregar a su Items colección). Simplemente acepta la recopilación de algunos objetos arbitrarios que se utilizarán para generar datos internos completamente no relacionados. SelectListItemcolección s.

Si quieres, puedes usar SelectList(IEnumerable, string, string) constructor de tal manera:

List Provinces = new List();
Provinces.Add(new SelectListItem()  Text = "Northern Cape", Value = "NC" );
Provinces.Add(new SelectListItem()  Text = "Free State", Value = "FS" );
Provinces.Add(new SelectListItem()  Text = "Western Cape", Value = "WC" );

this.ViewBag.Provinces = new SelectList(Provinces, "Value", "Text");

Funcionará. Pero es innecesarioporque creas complejo SelectListItem elementos que no serán utilizados por el SelectList – simplemente los tratará como cualquier otro objeto de datos.

De la misma manera, puede usar alguna otra clase más simple en lugar de SelectListItem:

public class SelectListModel

    public String Text  get; set; 
    public String Value  get; set; 


...
Provinces.Add(new SelectListModel()  Text = "Northern Cape", Value = "NC" );

Use DropDownList y asígnele el mismo nombre que el nombre de la propiedad del modelo. El mío es “Tipo de artículo”

     @Html.LabelFor(model => model.ItemType, new  @class = "control-label" )
     @Html.DropDownList("ItemType", (IEnumerable)ViewBag.ItemTypes, new  @class = "form-control" )
     @Html.ValidationMessageFor(model => model.ItemType, null, new  @class = "text-danger" )

        var types = new List();
        types.Add(new SelectListItem()  Text = "Select...", Value = string.Empty );
        types.Add(new SelectListItem()  Text = "OTC", Value = "0" );
        types.Add(new SelectListItem()  Text = "Generic", Value = "1" );
        types.Add(new SelectListItem()  Text = "Brand", Value = "2" );
        types.Add(new SelectListItem()  Text = "Non-Merchandise", Value = "9" );

        ViewBag.ItemTypes = types;

    [Required(ErrorMessage = "Item Type is required")]
    public Int32 ItemType  get; set; 

puedes cambiar tu código de

SelectList lstProvinces = new SelectList(Provinces);

a

SelectList lstProvinces = new SelectList(Provinces, "Value", "Text");

y mostrará las provincias correctamente.

Calificaciones y reseñas

Si para ti ha sido de provecho este artículo, nos gustaría que lo compartas con más entusiastas de la programación así contrubuyes a difundir nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *