Mam aplikację MVC, gdzie chcę wyświetlić listę rozwijaną z informacjami z bazy danych.MVC gdzie powinna być logika Sterownik lub View Model
Opcja wyświetla informacje z bazy danych Samochody za pomocą tabeli Marka, która jest marką samochodu.
Więc moim zdaniem będzie mam coś takiego:
@model VectorCheck.ViewModels.CarsViewModel
...
@Html.DropDownListFor(modelItem => Model.MakeId, Model.Makes)
...
więc jakoś trzeba uzyskać modelu widoku listy marek.
Mogę więc mieć pewną logikę do tego, by mówić tylko samochody, które mają kolor Czerwony.
var redCars = _unitOfWork.Cars(x => x.Colour == "Red");
Moje pytanie brzmi: gdzie najlepiej zastosować logikę dla tego zapytania. Należy go w widokuModelu lub kontrolera.
Sposób, w jaki go widzę, mam dwie opcje.
Opcja 1: Kontroler.
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;
}
Tak więc w tym przykładzie uzyskać carMakes w kontrolerze i dać im do viewmodel, który jest po prostu pojemnik.
Opon 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 });
}
Więc w tej opcji Kładę logiki, aby uzyskać prawidłowe carmakes w modelu widoku. To coś więcej niż pojemnik.
Więc chcę wiedzieć, który z tych sposobów jest prawidłowy sposób to zrobić?