У меня есть метод, который возвращает представление, и в этом представлении я хочу отобразить список чего-либо. Для этого мне понадобится модель со списком домов.
Документация Microsoft (https://docs.microsoft.com/en-us/aspnet/core/mvc/overview?view=aspnetcore-2.2) говорит, что ответственность за выбор и работу с моделью (моделями) лежит на контроллере, и что ответственность за модель заключается в инкапсуляции бизнес-логики. Я не уверен в лучшей практике:
Логика в контроллере:
Модель:
public class DepartmentViewModel
{
public IEnumerable<DepartmentDto> lstDepartments { get; set; }
}
Контроллер:
public class DepartmentController : Controller
{
private readonly IUnitOfWork _work;
private readonly IMapper _mapper;
public DepartmentController(IUnitOfWork work, IMapper mapper)
{
_work = work;
_mapper = mapper;
}
public async Task<IActionResult> Index(DepartmentViewModel viewmodel)
{
var lstAllDepartments = _work.DepartmentRepository.GetAll(); // All departments from the database.
var lstDepartmentsForViewmodel = _mapper.Map<IEnumerable<Core.Entities.Department>, IEnumerable<DepartmentDto>>(lstAllDepartments); // Map to DTO.
viewmodel.lstDepartments = lstDepartmentsForViewmodel;
return View(viewmodel);
}
}
Логика в модели:
Модель:
public class DepartmentViewModel
{
private readonly IUnitOfWork _work;
private readonly IMapper _mapper;
public DepartmentViewModel(IUnitOfWork work, IMapper mapper)
{
_work = work;
_mapper = mapper;
var lstAllDepartments = _work.DepartmentRepository.GetAll(); // All departments from the database.
var lstDepartmentsForViewmodel = _mapper.Map<IEnumerable<Core.Entities.Department>, IEnumerable<DepartmentDto>>(lstAllDepartments); // Map to DTO.
lstDepartments = lstDepartmentsForViewmodel;
}
public IEnumerable<DepartmentDto> lstDepartments { get; set; }
}
Контроллер:
public class DepartmentController : Controller
{
private readonly IUnitOfWork _work;
private readonly IMapper _mapper;
public DepartmentController(IUnitOfWork work, IMapper mapper)
{
_work = work;
_mapper = mapper;
}
public async Task<IActionResult> Index()
{
DepartmentViewModel viewmodel = new DepartmentViewModel(_work, _mapper);
return View(viewmodel);
}
}
Руководство любого рода будет наиболее ценно.