我有一個MVC應用程序,我想顯示一個下拉列表與數據庫中的信息。MVC在哪裏邏輯去控制器或查看模型
下拉菜單將顯示來自數據庫的信息汽車使用表格Make是汽車的品牌。
所以,在我看來,我會碰到這樣的:
@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控制器,並給他們的視圖模型這是一個簡單的容器。
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 });
}
因此,在這個選項我把邏輯得到的視圖模型正確carmakes。它不僅僅是一個容器。
所以我想知道的是這些方法中的哪一種是正確的做法?