c# - 如何使用 AutoMapper 将列表映射到 ASP.NET MVC 中的 SelectList?

标签 c# asp.net-mvc automapper

我有一个数据列表,我想将其绑定(bind)到我的 ViewModel 中的 SelectList。

我如何使用 AutoMapper 执行此操作? ?

最佳答案

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

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

然后您可以在 FooModel 之间建立映射和 SelectListItem :

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 操作可能如下所示:

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/

相关文章:

c# - 在 ASP.NET MVC 中为多语言结构创建表单时需要帮助

c# - 二进制返回 List<Int16>

automapper - Windsor CaSTLe 相当于 Autofac 的 IStartable

c# - 使用自动映射器 C# 进行映射时出现问题

c# - 混淆 SqlCommand 和 SqlDataAdapter

c# - 随机的效果不好

asp.net-mvc - 在不创建角色/用户身份验证的情况下查看 elmah 日志

asp.net-mvc - 如何在部署的 ASP MVC 网站上更新数据库模型而不丢失数据

asp.net-mvc - 如何用MongoDB实现关键字和位置搜索?

asp.net-mvc - 映射时如何处理循环引用?