2011-02-01 92 views

回答

15

如果我们假设你有一个模型:

public class FooModel 
{ 
    public int ModelId { get; set; } 
    public string Description { get; set; } 
} 

然后你可以有FooModelSelectListItem之间的映射:

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

,然后当你有你的IEnumerable<FooModel>则只需将其转换为IEnumerable<SelectListItem>

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

一个更现实的例子是有以下视图模型:

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

所以,现在你的控制器的动作看起来是这样的:

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

和你的强类型的视图中:

@Html.DropDownListFor(
    x => x.SelectedItemId, 
    new SelectList(Model.Items, "Value", "Text") 
) 
+0

所以你必须使用选择列表项目?你能不能在视图模型中使用SelectList,而不必在视图中生成SelectList?你有它的方式是好的,只要你能做到这一点,我总是在我的视图模型中选择List。 – chobo2 2011-02-03 21:37:44

相关问题