在使用 FluentValidation 时,我有一个单独的.dll,其中包含我们的数据库模型和部分类等,它工作正常(桌面条形码终端和我们的网站都可以使用它)。
对于桌面应用程序,我可以读取并显示所有错误,如下所示
public override int SaveChanges()
{
var errors = this.GetValidationErrors();
if (errors.Any())
{
//handle validation errors
return 0;
}
else
{
return base.SaveChanges();
}
}
对于 MVC 站点,我可以在单个模型上设置验证器或创建数据注释并让它们正常工作(这不是我想要的)。我无法理解的是如何强制我的模型映射到我的实体,以便我可以在视图中显示流畅的验证消息。我不想维护两组单独的逻辑,并且条形码应用程序和网站必须使用相同的逻辑。
我必须将我的实体直接映射到视图吗?我一直认为这是一件坏事,而且不是很灵活。或者有没有办法说明模型中的字段映射回我的一个实体的属性?也许是一些描述的注释。
编辑:
只是对我需要的验证类型进行一些说明。
大多数前端输入类型验证仍将保留在 viewModels 中(必需/长度/密码匹配等 - 基本上我也可以用于客户端验证的所有内容)。但是有所有我不想要的业务逻辑验证。必须在设置其他选项之前验证电子邮件地址之类的东西,帐号必须是基于名称的特定格式(我不能用正则表达式做的事情)。此特定日期不是有效的交货日期等。
我想我可以做的一件事是以某种方式将这些添加到 ValidationSummary 并将它们与各个字段分开显示。