将mvc与存储库一起使用时,验证模型的最佳方法是什么? 我寻找的例子,但我没有发现任何我需要的东西。
假设我有一个包含5个属性的模型..其中3个带有dataannotations ..我有一些验证,我需要在插入之前检查数据库。
我需要像'User.IsValidToInsert'之类的东西来检查它是否有效。但我也想使用'ModelState.IsValid',因为我不想在'IsValidToInsert'中手动检查所有带有dataannotations的属性。
我该怎么做?我应该设置在'IsValidToInsert'中访问数据库的验证吗?我应该将'User'和'ModelState'作为参数传递给存储库类吗?
答案 0 :(得分:0)
您应该使用特定于视图的视图模型。如果您有Create
操作来创建Product
,请创建ProductCreate
视图模型。您可以放置特定于创建产品的数据注释(或Fluent验证等)。这将是您的视图/控制器的模型。如果您有“编辑”页面,则创建ProductEdit
视图模型。
现在,如果您有其他逻辑(例如验证用户是否已经存在),那么您应该将其放在服务层中。您的控制器应该尽可能简单。您发布视图模型,将其转换为域模型并在必要时将其传递给服务层。
[HttpPost]
public ActionResult Create(ProductCreate model)
{
// simple validations
if( !ModelState.IsValid )
{
return View(model);
}
// Domain Model / Entity
Product product = // create a product from your model here
// service layer
ProductService.Add(product);
return RedirectToAction("Index");
}