Ich habe eine MVC-App, wo ich eine Dropdown-Liste mit Informationen aus der Datenbank anzeigen möchte.MVC wo sollte die Logik gehen der Controller oder das View-Modell
Das Dropdown wird Informationen aus der Datenbank anzeigen Autos mit der Tabelle Make, welche die Marke des Autos ist.
Also meiner Meinung nach werde ich so etwas wie:
@model VectorCheck.ViewModels.CarsViewModel
...
@Html.DropDownListFor(modelItem => Model.MakeId, Model.Makes)
...
Also irgendwie muss ich die View-Modell die Liste der Marken erhalten.
Also könnte ich einige Logik haben, um mit diesem sagen nur Autos, die Farbe rot sind.
var redCars = _unitOfWork.Cars(x => x.Colour == "Red");
Also meine Frage ist, wo ist die beste Praxis, um die Logik für diese Abfrage zu setzen. Sollte es im ViewModel oder Controller gehen.
So wie ich es sehe, habe ich zwei Optionen.
Option 1: Der Controller.
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));
}
Ansichtsmodell
public Car Car { get; set; }
public IEnumerable<SelectListItem> CarMakes { get; set; }
InsertUpdateCarViewModel(Car car, IEnumerable<SelectListItem> carMakes)
{
Car= car;
CarMakes = carMakes;
}
So in diesem Beispiel bekomme ich die carMakes in der Steuerung und gebe sie an das Ansichtsmodell, das einfach ein Behälter ist.
Opon 2: Das Ansichtsmodell
public ActionResult Edit(int id)
{
var car = _unitOfWork.CarRepository.Get(id);
return View("Edit", new InsertUpdateCarViewModel(car));
}
Ansichtsmodell
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 });
}
Also in dieser Option setze ich die Logik, die richtigen carmakes in dem View-Modell zu bekommen. Es ist mehr als ein Container.
Also was ich möchte wissen, welche dieser Möglichkeiten ist die richtige Art, dies zu tun?