c# - 实现 DataAnnotations 验证属性时,我应该调用 base.IsValid() 吗?

标签 c# validation data-annotations

我正在创建一个 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),还是这样做是多余的/完全错误的?

欢迎任何评论。

最佳答案

您不需要覆盖任何其他内容,也不应调用 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 中的验证器。做得很好,来源很有启发性。自 5 月以来一直没有搬家,希望它仍然活跃。

关于c# - 实现 DataAnnotations 验证属性时,我应该调用 base.IsValid() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3337882/

相关文章:

c# - DataAnnotation 和 Code First 使用 Identity 2.2.1 为 ApplicationUser 创建外键

c# - ASP.NET MVC 使用数据注释迭代模型属性

c# - 如何从系统注册表中读取数据库连接字符串?

c# - 打开没有扩展名的文件

Jquery 有助于强制文本区域的最大长度?

jquery自定义方法问题,

c# - 在 ASP.NET MVC (3) 中使用数据注释验证时是否可以生成属性的计算值?

创建位图时 C# 内存不足

c# - 强制 EF ApplicationUser 加载导航属性

javascript - 检查是否输入了正确的电子邮件