gpt4 book ai didi

asp.net-mvc - MVC 逻辑应该放在 Controller 还是 View 模型中

转载 作者:行者123 更新时间:2023-12-04 15:02:09 24 4
gpt4 key购买 nike

我有一个 MVC 应用程序,我想在其中显示一个包含数据库信息的下拉列表。

下拉列表将使用作为汽车品牌的 Make 表显示来自数据库 Cars 的信息。

所以在我看来,我会有类似的东西:

@model VectorCheck.ViewModels.CarsViewModel
...

@Html.DropDownListFor(modelItem => Model.MakeId, Model.Makes)
...

所以我需要以某种方式获取 View 模型的制造商列表。

所以我可能有一些逻辑可以说只有红色的汽车。
var redCars = _unitOfWork.Cars(x => x.Colour == "Red");

所以我的问题是放置此查询逻辑的最佳实践在哪里。它应该放在 viewModel 还是 Controller 中。

在我看来,我有两个选项。

选项 1: 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));
}

View 模型
public Car Car { get; set; }
public IEnumerable<SelectListItem> CarMakes { get; set; }

InsertUpdateCarViewModel(Car car, IEnumerable<SelectListItem> carMakes)
{
Car= car;
CarMakes = carMakes;

}

所以在这个例子中,我在 Controller 中获取 carMakes 并将它们提供给 viewModel,它只是一个容器。

选项 2:viewModel
public ActionResult Edit(int id)
{
var car = _unitOfWork.CarRepository.Get(id);

return View("Edit", new InsertUpdateCarViewModel(car));
}

View 模型
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 });

}

所以在这个选项中,我将逻辑放在 View 模型中以获得正确的汽车制造商。它不仅仅是一个容器。

所以我想知道的是这些方法中的哪一种是正确的方法?

最佳答案

在 Controller 中。 ViewModel 不应该知道您正在使用的工作单元。此外,如果不必依赖逻辑 x => x.Colour == "Red",这种情况下的 View 模型将更加可重用。 .尽管这可以转移到参数中,但总的来说,我相信您的模型(以及 View )在 Controller 中处理这些问题时会更可重用。

关于asp.net-mvc - MVC 逻辑应该放在 Controller 还是 View 模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com