我有一个注册页面,用户通过电子邮件注册。因此,对于模型,我有一个验证规则,其中指出:
RuleFor(x => x.Email).EmailAddress().WithMessage(localizationService.GetResource("Common.WrongEmail"));
现在的问题是我有一个要求,即基于我们希望将其限制为具有特定域的电子邮件的设置。
我只是通过进行正则表达式验证来做到这一点
RuleFor(x => x.Email).Matches(customerSettings.RestrictLoginPattern).WithMessage(localizationService.GetResource("Customer.Fields.Email.EnteredPasswordWrongFormat"));
因此,如果电子邮件与正则表达式不匹配,则会显示错误消息。到现在为止还挺好。
第二个规范是用户应该能够不提交域。所以对于user.name@test.com用户应该能够只写user.name
我通过对电子邮件属性进行获取/设置来做到这一点
public string Email {
set
{
_email = value;
}
get
{
if (_email == null)
return null;
if(!_email.EndsWith(LoginSuffix))
{
return string.Format("{0}{1}", _email, LoginSuffix);
}
return _email;
}
因此,如果我写的东西不以test.com结尾,它就会被添加。现在的问题是这不会发生在客户端,因此验证会显示电子邮件格式不正确的错误。
我尝试从电子邮件中删除获取功能,并添加了一个我确实验证过的属性 FormatedEmail。由于 FormatedEmail 不在表单客户端上工作正常,但是当它不验证时,我无法将错误挂接到电子邮件字段,就像摘要错误一样
我看到多个解决方案
我可以禁用该字段的客户端验证。但是根据搜索,我发现这可能是不可能的?
我可以编写一个自定义的客户端验证,但对于这样一个“小”问题来说,这感觉相当复杂。
有一种方法可以以某种方式将错误绑定到字段?
ModelState.AddModelError("Email", "Error message");