2011-02-01 13 views

cevap

15

Mapper 
    .CreateMap<FooModel, SelectListItem>() 
    .ForMember(
     dest => dest.Value, opt => opt.MapFrom(src => src.ModelId.ToString()) 
    ) 
    .ForMember(
     dest => dest.Text, opt => opt.MapFrom(src => src.Description) 
    ); 

ve alınca o senin IEnumerable<FooModel> basitçe olur bir IEnumerable<SelectListItem> dönüştürmek:

IEnumerable<FooModel> models = ... 
IEnumerable<SelectListItem> viewModels = Mapper 
    .Map<IEnumerable<FooModel>, IEnumerable<SelectListItem>>(models); 

public ActionResult Index() 
{ 
    IEnumerable<FooModel> items = ... 
    var viewModel = new MyViewModel 
    { 
     Items = Mapper.Map<IEnumerable<FooModel>, IEnumerable<SelectListItem>>(items) 
    }; 
    return View(viewModel); 
} 

ve kesinlikle yazılı görünümü içinde:

@Html.DropDownListFor(
    x => x.SelectedItemId, 
    new SelectList(Model.Items, "Value", "Text") 
) 
Yani şimdi kontrolör eylem gibi görünebilir

public class MyViewModel 
{ 
    public string SelectedItemId { get; set; } 
    public IEnumerable<SelectListItem> Items { get; set; } 
} 

:

daha gerçekçi bir örnek şu görünümü modeli var olacaktır

+0

, bu yüzden seçim listeleri kullanmanız gerekiyor? Bazıları görünüm modelinde görmek yerine görünüm modelinde SelectList'e sahip olabilir misiniz? Sahip olduğunuz şekilde, sadece benim her zaman benim görünüm modelimdeki listeyi seçtiğimde yapabileceğinizi merak ediyorum. – chobo2

+0

Ayrıca "Değer" ve "Metin" her zaman boştur. Neden olduğundan emin değilim. Kodumda, bir Model Listesi'ne değil, alan adı nesneler listeme bağlanıyorum. Yani belki bu isimleri eşleştiremez ("Değer" veya "Metin" diye bir şeyim olmadığı için), ne kullanacağımı anlatabileceğim bir yol var mı? – chobo2

+0

Oluşturma haritanızı kullanmalıyım. Sadece 1 numaralı seçenek yolu ve 2 numaralı seçenek kullanıyorum diye düşündüm. Ayrıca "opt" ne anlama geliyor? Seçeneği? – chobo2

İlgili konular