Это моя модель.
public class MyModel
{
[Display(Name = "Email Address")]
[EmailAddress] // my custom validator to check valid email format
[Remote("IsEmailAddressUsed", "Validation")]
public string EmailAddress { get; set; }
}
Проблема, с которой я столкнулся, заключается в том, что действие IsEmailAddressUsed вызывается даже при вводе неверного формата для адреса электронной почты.Пользовательский валидатор EmailAddress отлично работает, когда я удаляю Remote.Я хочу проверить по БД только тогда, когда адрес электронной почты в правильном формате.Есть ли способ сделать удаленный валидатор оцененным последним?
Реализация пользовательского валидатора: EmailAddressAttribute.
public class EmailAddressAttribute : RegularExpressionAttribute, IClientValidatable
{
public EmailAddressAttribute() :
base("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9]+(\\.[a-z0-9]+)*\\.([a-z]{2,4})$")
{
}
protected override ValidationResult IsValid(object value,
ValidationContext validationContext)
{
if (value != null)
{
if (!base.IsValid(value))
{
return new ValidationResult(
FormatErrorMessage(validationContext.DisplayName));
}
}
return ValidationResult.Success;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata,
ControllerContext context)
{
var rule = new ModelClientValidationRule
{
ErrorMessage = FormatErrorMessage(metadata.GetDisplayName())
};
rule.ValidationParameters.Add("pattern", Pattern);
rule.ValidationType = "emailaddress";
yield return rule;
}
}
И сопровождающий скрипт:
if ($.validator && $.validator.unobtrusive)
{
$.validator.unobtrusive.adapters.addSingleVal("emailaddress", "pattern");
$.validator.addMethod("emailaddress", function (value, element, pattern) {
return value.match(pattern);
});
}
Спасибо!