所以我尝试使用FluentValidation在MVC 5项目中验证我的模型。
一切都很顺利,但我遇到了一个我不知道如何修复的问题。
我将所有内容都本地化为英语和葡萄牙语。如果我尝试注册已存在的用户,则会创建一条消息,如:
Name 'example@mail.com' is already taken
Email 'example@mail.com' is already taken
我使用新MVC 5项目附带的身份验证系统,因为这只是一个原型测试项目。
我已经在验证器中创建了此方法:
public bool UniqueNameEmail(RegisterViewModel model, string nameemail)
{
ApplicationDbContext _db = new ApplicationDbContext();
var dbModel = _db.Users.Where(x => x.UserName.ToLower() == nameemail.ToLower())
.SingleOrDefault();
if (dbModel == null) return true;
return dbModel.Email == model.Email;
}
如果您想知道为什么我使用名称和电子邮件,那是因为名称始终等于注册的电子邮件。 然后我像这样使用它:
RuleFor(registerViewModel => registerViewModel.Email).Must(UniqueNameEmail).WithLocalizedMessage(() => Resource.Unique_Field)
但实体验证会覆盖来自验证器的验证。
我不知道如何解决这个问题。有人可以帮忙吗?