6
我有我想要绑定到我的ViewModel SelectList的数据列表。如何使用AutoMapper将列表映射到ASP.NET MVC中的SelectList?
我该如何使用AutoMapper来做到这一点?
我有我想要绑定到我的ViewModel SelectList的数据列表。如何使用AutoMapper将列表映射到ASP.NET MVC中的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);
一个更现实的例子是有以下视图模型:
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")
)
所以你必须使用选择列表项目?你能不能在视图模型中使用SelectList,而不必在视图中生成SelectList?你有它的方式是好的,只要你能做到这一点,我总是在我的视图模型中选择List。 – chobo2 2011-02-03 21:37:44