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. SelectListItem
colecció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.