ASP.NET MVC 3 - Как сделать удаленный валидатор оцененным последним - PullRequest
1 голос
/ 12 октября 2011

Это моя модель.

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);
    });
}

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...