【问题标题】:Validating an e-mail address with unobtrusive javascript / MVC3 and DataAnnotations使用不显眼的 javascript / MVC3 和 DataAnnotations 验证电子邮件地址
【发布时间】:2011-09-03 11:01:31
【问题描述】:

jQuery Validation 使验证电子邮件地址变得简单:

$("someForm").validate({
    rules: {
        SomeField: {
            required: true,
            email: true,
            remote: {
                type: "POST",
                url: "CheckEmail"
            }
        }
    }
});

这使得 SomeField 是必需的,必须格式化为电子邮件地址,并且还执行对 CheckEmail 操作的远程调用(检查重复项)。

我喜欢让事情尽可能简单,这样我就可以用数据注释做很多相同的事情:

public class RegisterModel {
    [Required]
    [Remote("CheckEmail", "Home", HttpMethod="POST")]
    public string SomeField { get; set; }
}

ASP.net MVC 3 / Data Annotations 是否具有内置/简单的验证方式以确保电子邮件地址格式正确?

如果可能的话,我希望它生成不显眼的 javascript。

【问题讨论】:

    标签: c# asp.net-mvc-3 data-annotations unobtrusive-javascript unobtrusive-validation


    【解决方案1】:

    我认为这是您要查找的代码(这类似于 ScottGu 的示例,但也在默认错误消息中显示 DisplayName 而不是属性名称):

    public class EmailAttribute : RegularExpressionAttribute
    {
        private const string defaultErrorMessage = "'{0}' must be a valid email address";
    
        public EmailAttribute() : 
            base("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9]+(\\.[a-z0-9]+)*\\.([a-z]{2,4})$")
        { }
    
        public override string FormatErrorMessage(string name)
        {
            return string.Format(defaultErrorMessage, name);
        }
    
        protected override ValidationResult IsValid(object value,
                                                ValidationContext validationContext)
        {
            if (value != null)
            {
                if (!base.IsValid(value))
                {
                    return new ValidationResult(
                        FormatErrorMessage(validationContext.DisplayName));
                }
            }
    
            return ValidationResult.Success;
        }
    }
    

    那么您的模型属性将如下所示:

        [DisplayName("My Email Address")]
        [Email]
        public string EmailAddress { get; set; }
    

    【讨论】:

      【解决方案2】:

      ASP.net MVC 3 / 数据注释 有一个内置/简单的方法来验证 确保电子邮件地址在 格式正确吗?

      不是内置的,但您可以使用[RegularExpression]。 Scott Gu 在blog post 中举例说明了这种正则表达式。他写了一个自定义的EmailAttribute 派生自RegularExpressionAttribute 以避免重复逻辑。

      【讨论】:

      • 假设我想编写自己的属性,例如 [Email]。我怎么能这样做并让它产生不引人注目的javascript。你能指出我正确的方向吗?
      • @Dismissile,查看 Scott Gu 博客文章。其中他来自RegularExpressionAttribute,因此客户端验证将自动工作,因为 Regex 属性已经注册了一个 jquery 适配器。
      • 非常感谢。我略读了它,但我没有看到他真的推导出来。
      【解决方案3】:

      Data Annotation Extensions 库有一个[Email] 属性,允许验证电子邮件地址。

      还有一个blog post 概述了如何使用该库。

      【讨论】:

      • Vadim 的意思是现在有一个 NuGet 包可用,其中包括用于电子邮件、日期、信用卡等的内置 DataAnnotations。很不错。项目网址:dataannotationsextensions.org.
      【解决方案4】:

      EmailAddress 属性已经内置在框架中,不需要数据注释扩展或其他逻辑:Email model validation with DataAnnotations and DataType

      【讨论】:

        猜你喜欢
        • 2018-03-13
        • 1970-01-01
        • 2012-02-17
        • 1970-01-01
        • 1970-01-01
        • 2014-06-12
        • 1970-01-01
        • 2021-10-20
        • 2018-12-12
        相关资源
        最近更新 更多