Если бизнес-логика, которая входит в создание модели представления, довольно сложна, я обычно извлекаю ее в вспомогательный метод, который я могу протестировать независимо от контроллера.
Однако, кроме этого, ваше создание модели представления прекрасно в контроллере, как оно есть.Как уже отмечалось, как создание списка выбора можно сделать намного проще (не говоря уже о возможности многократного использования).
Вот расширение ToSelectList IEnumerable вместе с примером использования:
public static List<SelectListItem> ToSelectList<T>( this IEnumerable<T> enumerable, Func<T, string> value, Func<T, string> text, string defaultOption)
{
var items = enumerable.Select(f => new SelectListItem()
{
Text = text(f) ,
Value = value(f)
}).ToList();
if (!string.IsNullOrEmpty(defaultOption))
{
items.Insert(0, new SelectListItem()
{
Text = defaultOption,
Value = string.Empty
});
}
return items;
}
В вашей модели представления вы можете добавить свойство следующим образом:
IEnumerable<SelectListItem> Employees { get; set; }
В вашем контроллере (я предполагаю, что ваше хранилище возвращает IEnumberable):
var employees = new IEnumerable<Employee>();
using (var gr = new GenericRepo<Employee>())
{
employees = gr.Get();
}
vm.Employees = employees.ToSelectList(x=>x.FirstName + " " + x.LastName, x=>x.Id, "-- Select Employee --")
Изатем, чтобы настроить выпадающий список в представлении, он будет выглядеть примерно так:
@Html.DropDownListFor(model => model.EmployeeId, Model.employees)