У меня есть приложение MVC, где я хочу отобразить выпадающий список с информацией из базы данных.MVC где логика должна идти Контроллер или Модель просмотра
В раскрывающемся списке будет отображаться информация из базы данных Автомобили, использующие стол «Сделай», который является маркой автомобиля.
Так на мой взгляд, у меня будет что-то вроде:
@model VectorCheck.ViewModels.CarsViewModel
...
@Html.DropDownListFor(modelItem => Model.MakeId, Model.Makes)
...
Так или иначе я должен получить модель просмотра списка марок.
Поэтому у меня может быть некоторая логика, чтобы говорить об этом только с автомобилями, которые окрашены в красный цвет.
var redCars = _unitOfWork.Cars(x => x.Colour == "Red");
Так что мой вопрос в том, где лучше всего поставить логику для этого запроса. Должно ли оно находиться в представленииModel или контроллере.
Как я вижу, у меня есть два варианта.
Вариант 1: Контроллер.
public ActionResult Edit(int id)
{
var car = _unitOfWork.CarRepository.Get(id);
var carMakes = _unitOfWork.CarMakeRepository.Where(x => x.Colour == "Red").Select(u => new SelectListItem { Value = u.CarMakeId.ToString(), Text = u.Name });
return View("Edit", new InsertUpdateCarViewModel(car, carMakes));
}
ViewModel
public Car Car { get; set; }
public IEnumerable<SelectListItem> CarMakes { get; set; }
InsertUpdateCarViewModel(Car car, IEnumerable<SelectListItem> carMakes)
{
Car= car;
CarMakes = carMakes;
}
Таким образом, в этом примере я получаю carMakes в контроллере и передать их в ViewModel, который просто контейнер.
Опон 2: ViewModel
public ActionResult Edit(int id)
{
var car = _unitOfWork.CarRepository.Get(id);
return View("Edit", new InsertUpdateCarViewModel(car));
}
ViewModel
public Car Car { get; set; }
public IEnumerable<SelectListItem> CarMakes { get; set; }
InsertUpdateCarViewModel(Car car)
{
Car= car;
CarMakes = _unitOfWork.CarMakeRepository.Where(x => x.Colour == "Red").Select(u => new SelectListItem { Value = u.CarMakeId.ToString(), Text = u.Name });
}
Таким образом, в этой опции я ставлю логику, чтобы получить правильный carmakes в модели представления. Это больше, чем контейнер.
Так что я хочу знать, какой из этих способов является правильным способом сделать это?