我有一个数据列表,我想将其绑定(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/