データベースからの情報を含むドロップダウンリストを表示したいMVCアプリがあります。
ドロップダウンには、車のメーカーであるMakeテーブルを使用してデータベースCarsからの情報が表示されます。
したがって、私の見解では、次のようなものになります。
@model VectorCheck.ViewModels.CarsViewModel
...
@Html.DropDownListFor(modelItem => Model.MakeId, Model.Makes)
...
だからどういうわけか私はビューモデルを作成するリストを取得する必要があります。
だから私はこれと一緒に行くいくつかの論理があるかもしれませんが、色が赤の車だけです。
var redCars = _unitOfWork.Cars(x => x.Colour == "Red");
したがって、私の質問は、このクエリのロジックを配置するためのベストプラクティスはどこにあるかということです。viewModelまたはコントローラーに配置する必要があります。
私の見方では、2つのオプションがあります。
オプション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に渡します。
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 });
}
したがって、このオプションでは、ビューモデルで正しいカーメイクを取得するためのロジックを配置しています。それは単なるコンテナではありません。
だから私が知りたいのは、これらの方法のどれがこれを行う正しい方法であるかということです。