我有一个要绑定(bind)到ViewModel中的SelectList的数据列表。

我如何使用AutoMapper做到这一点?

最佳答案

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

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

一个更现实的示例将是具有以下 View 模型:
public class MyViewModel
{
    public string SelectedItemId { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

因此,现在您的 Controller Action 可能如下所示:
public ActionResult Index()
{
    IEnumerable<FooModel> items = ...
    var viewModel = new MyViewModel
    {
        Items = Mapper.Map<IEnumerable<FooModel>, IEnumerable<SelectListItem>>(items)
    };
    return View(viewModel);
}

并在您的强类型 View 中:
@Html.DropDownListFor(
    x => x.SelectedItemId,
    new SelectList(Model.Items, "Value", "Text")
)

关于c# - 如何使用AutoMapper将列表映射到ASP.NET MVC中的SelectList?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4866316/

10-13 06:20