5

Llamo a un proyecto (WCF, pero eso no debería importar) que consume un IList, con MVC 3 (que tampoco debería importar tampoco) Quiero convertir un sola columna lista de cuerdas (IList que es sólo una lista de países) en una listaConvertir IList <string> a MVC.SelectListItem necesita conversión explícita

lista

no modificables que he hecho como este y que funciona bien:

public List<SelectListItem> mothermarriedatdelivery = new List<SelectListItem>(); 
mothermarriedatdelivery.Add(new SelectListItem() { Text = "Yes", Value = "1" }); 

Sin embargo, ahora estoy tratando de convertir este código:

public List<SelectListItem> BirthPlace { get; set; } 
BirthPlace = new List<SelectListItem>(); 
GetHomeRepository repo = new GetHomeRepository(); 
BirthPlace = repo.GetCountries(); 

Necesito convertir implícitamente de List a SelectListItem, ¿alguien hace esto? Sí ... busqué y encontré varios ejemplos, pero ninguno que realmente se ajuste a mi necesidad específica.

+0

No puede convertir una colección (IList) en un solo elemento (SelectListItem). – joedotnot

Respuesta

18

Puede utilizar LINQ como tal:

BirthPlace = repo.GetCountries() 
       .Select(x => new SelectListItem { Text = x, Value = x }) 
       .ToList(); 

O creo que sólo se puede utilizar uno de los constructores de selectlist:

public SelectList BirthPlace { get; set; } 

BirthPlace = new SelectList(repo.GetCountries()); 
+0

Genial, eso funcionó (Linq) pero no la segunda parte. Sin embargo, me estoy divirtiendo con la navaja de afeitar. No se puede convertir el tipo 'System.Collections.Generic.List ' a 'System.Web.Mvc.SelectListItem' - @ Html.DropDownListFor (model => model.BirthPlace, Model.BirthPlace como SelectListItem) –

+1

Se solucionó el problema de la afeitadora. Gracias de nuevo Laurent! –

0

En Controlador,

var result = proxy.GetAllLocations(); 

    ViewBag.Area = result.Where(p => p.ParentId == null).Select(p => new SelectListItem { Text = p.LocationName, Value = p.LocationId.ToString() }).ToList(); 

    ViewBag.Locations = result.Where(p => p.ParentId != null).Select(p => new SelectListItem { Text = p.LocationName, Value = p.LocationId.ToString() }).ToList(); 

    return View(); 

a la vista,

@Html.DropDownList("LocationName", ViewData["Area"] as IEnumerable<SelectListItem>) 
Cuestiones relacionadas