При реализации атрибута проверки DataAnnotations я должен вызвать base.IsValid ()? - PullRequest
1 голос
/ 26 июля 2010

Я создаю атрибут проверки DataAnnotations для сопоставления электронных писем, используя тот же шаблон, что и jQuery (да, это должно быть сделано раньше, но я не могу его найти ...), и я не уверен, что именноЯ должен переопределить и нужно ли вызывать методы базовых классов или нет.В настоящее время у меня есть эта реализация:

public class EmailAttribute : ValidationAttribute
{
    const string emailPattern = // long regex string
    private Regex emailRegex = new Regex(emailPattern, RegexOptions.Compiled);

    public override bool IsValid(object value)
    {
        return (value is string) && 
            emailRegex.IsMatch((string)value) && 
            base.IsValid(value);

    }
}

Есть ли какие-либо другие методы, которые мне нужно переопределить, чтобы это работало правильно?Должен ли я звонить base.IsValid(value), как указано выше, или это излишне / неправильно для этого?

Любые комментарии приветствуются.

1 Ответ

4 голосов
/ 26 июля 2010

Вам не нужно переопределять что-либо еще, и вы не должны вызывать base.IsValid.

К вашему сведению: вы можете рассмотреть возможность наследования от RegularExpressionAttribute для этого, чтобы вы выбирали параметры на стороне клиента.Например ...

public class EmailAttribute : RegularExpressionAttribute
{
  public EmailAttribute() :
    base(@"^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$")
  {
    ErrorMessage = "Please enter a valid email address";
  }  
}

Кроме того, это может быть полезно для вас:

http://foolproof.codeplex.com/

Это набор валидаторов, которые должны были быть в MVC.Хорошо сделано, и источник поучителен.Не двигался с мая, надеясь, что он все еще активен.

...