我有一个 MVC 应用程序,我想在其中显示一个包含数据库信息的下拉列表。
下拉列表将使用汽车制造商表 Make 显示来自数据库 Cars 的信息。
所以在我看来,我会有类似的东西:
@model VectorCheck.ViewModels.CarsViewModel
...
@Html.DropDownListFor(modelItem => Model.MakeId, Model.Makes)
...
所以我需要以某种方式获取视图模型的制作列表。
所以我可能有一些逻辑去说只有红色的汽车。
var redCars = _unitOfWork.Cars(x => x.Colour == "Red");
所以我的问题是将这个查询的逻辑放在哪里的最佳实践。它应该进入 viewModel 还是控制器。
我看到它的方式有两个选项。
选项 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));
}
视图模型
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:视图模型
public ActionResult Edit(int id)
{
var car = _unitOfWork.CarRepository.Get(id);
return View("Edit", new InsertUpdateCarViewModel(car));
}
视图模型
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 });
}
所以在这个选项中,我将逻辑放在视图模型中获取正确的汽车制造商。它不仅仅是一个容器。
所以我想知道的是这些方法中的哪一种是正确的方法?