我有销售控制器和产品控制器。销售控制器具有“创建”操作,该操作返回一个视图,该视图显示在数据库中注册的所有产品。用户必须在最终确定之前指定商品的销售数量,折扣和客户。
我想知道Sales控制器查询数据库并传递不同的模型类型(在这种情况下是产品列表)是否是一个好习惯。
Sales控制器中的操作如下所示:
[HttpGet]
public ActionResult Create()
{
ProductRepository productRepository = new ProductRepository();
List<Product> products = productRepository.ListProducts();
return View(products);
}
我的问题是:给定控制器中的操作是否必须严格传递其名称的相同模型类型?
我还想使用输入字段搜索客户端并使用Ajax检索数据(如果可能的话),但我不清楚是否应该请求SalesController或ClientsController。
对不起,如果这是一个愚蠢的问题,我还是MVC和ASP.NET的新手。
答案 0 :(得分:2)
不,他们为什么会这样?我的问题是:给定控制器中的操作是否必须严格传递其名称的相同模型类型?
规则是'#34;不要让我感到惊讶&#34;。如果行为有意义,我就不在乎你的回归。如果行为是荒谬的,则返回&#34;更正&#34;班级不会解决它。
答案 1 :(得分:1)
我的问题是:给定控制器中的动作是否必须严格执行 传递其名称的相同模型类型?
要添加到Jonathan的答案中,有一个警告只能使用数据库模型,而且缺乏灵活性。我总是使用视图模型,即使它是一个简单的页面,因为随着项目的发展,需求也在不断变化。但几乎所有代码的最佳实践是编写对你最有意义的内容。
答案 2 :(得分:0)
您可以将任何类型的模型传递给您的视图。例如,它可以是域模型,域模型列表,视图模型,视图模型列表等。您的可能性是无穷无尽的。
当我将数据传递给视图时,我通常会使用视图模型。视图模型将包含应该在屏幕上显示的数据。
如果您想在视图中仅显示与产品相关的数据列表,那么我认为可以执行以下操作:
public ActionResult Create()
{
// productRepository is injected
List<Product> products = productRepository.GetAll();
return View(products);
}
如果除了产品列表之外还希望在视图上显示其他数据,那么我通常会使用视图模型:
public ProductViewModel()
{
public List<Product> Products { get; set; }
public string Department { get; set; }
}
然后您的视图可能会更改为:
public ActionResult Create()
{
ProductViewModel productViewModel = new ProductViewModel();
productViewModel.Products = productRepository.GetAll();
productViewModel.Department = "Test Department Name";
return View(productViewModel);
}
我希望这会有所帮助。