5

açık dökümüne ihtiyaç duyar Bir projeyi (WCF, ama önemli olmamalıdır) MVC 3 ile (gerçekten açık bir şekilde önemli olmayan) bir IList tüketiyorum. bir listesineIList <string>, MVC'ye dönüştürün.SelectListItem,

Sert Kodlu liste böyle yapmış ve sorunsuz çalışırlar (Ülkeler sadece bir liste IList) dizeleri tek sütun listesi:

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

, şimdi dönüştürmek çalışıyorum Bu kod:

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

Listeden selectListItem'e dolaylı olarak dönüştürmem gerekiyor, bunu yapan var mı? Evet .. Arama yaptım ve birkaç örnek buldum, ancak hiçbiri benim özel ihtiyacım olana uymuyor.

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

Yoksa sadece SelectList en yapıcıları birini kullanabilirsiniz düşünüyorum:

+0

Koleksiyon (IList) öğesini tek bir öğeye (SelectListItem) dönüştürebilirsiniz. – joedotnot

cevap

18

Aşağıdaki gibi LINQ kullanabilirsiniz, Kontrolör olarak

public SelectList BirthPlace { get; set; } 

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

Cool, çalıştı (Linq) ancak ikinci kısmı değil. Ancak tıraş bıçağı ile "eğleniyorum". 'System.Collections.Generic.List ' türünü 'System.Web.Mvc.SelectListItem' - @ Html.DropDownListFor (model => model.BirthPlace, SelectListItem olarak Model.BirthPlace) 'ne çeviremezsiniz. –

+1

Bu traş makinesi sorunu giderildi. Tekrar teşekkürler Laurent! –

0

Görünümünde

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(); 

,

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