Как мне сопоставить список с SelectList в ASP.NET MVC с помощью AutoMapper? - PullRequest
7 голосов
/ 01 февраля 2011

У меня есть список данных, которые я хочу привязать к списку выбора в моей ViewModel.

Как мне сделать это, используя AutoMapper ?

1 Ответ

17 голосов
/ 01 февраля 2011

Если мы предположим, что у вас есть модель:

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")
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...