1


0

DataAnnotations検証属性を実装する場合、base.IsValid()を呼び出す必要がありますか?

私はjQueryと同じパターンを使用して一致する電子メールのDataAnnotations検証属性を作成しています(はい、それは前に行われている必要がありますが、それを見つけることができません…​)、私は正確に何がわかりませんオーバーライドすることになっており、基本クラスのメソッドを呼び出す必要があるかどうか。 現在、私はこの問題を抱えています:

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 Answer


4


他のものをオーバーライドする必要はなく、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][email protected]((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$")
  {
    ErrorMessage = "Please enter a valid email address";
  }
}

また、これはあなたに役立つかもしれません:

MVCにあるべきバリデーターのセットです。 うまくできており、ソースは有益です。 5月から移動しておらず、まだアクティブであることを望んでいます。