【问题标题】:So is an [Email] attribute built in ASP.NET MVC 3 or not?那么在 ASP.NET MVC 3 中是否内置了 [Email] 属性?
【发布时间】:2011-04-30 11:46:08
【问题描述】:

[Email] 属性将被内置到 ASP.NET MVC 3 中,就像它在期货中一样?那么它现在是否可用?我想这是一个相当愚蠢的问题,但我花了一些时间在谷歌上搜索并没有找到任何正常的答案。

电子邮件正则表达式:

"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$"

【问题讨论】:

  • 编译器会告诉你的。如果它编译,它是内置的。
  • 它编译但不提供任何客户端验证
  • 我很惊讶它可以编译。 EmailAttribute 类的完整命名空间是什么?该属性不属于 MVC3,它可能来自第三方库,将其用于完全不同的用途。
  • 它是 ComponentModel.DataAnnotations 的一个属性,如下所示:[DataType(DataType.EmailAddress, ErrorMessage = "Email is wrong")]

标签: .net asp.net-mvc-3 validation attributes data-annotations


【解决方案1】:

您可以包含 System.ComponentModel.DataAnnotations 并使用

    [DataType(DataType.EmailAddress)]
    public String ToAddress { get; set; }

【讨论】:

  • 那是因为 DataType 属性实际上并没有提供任何开箱即用的验证,而这正是 OP 所追求的。 DataType 属性改变 HtmlHelper 方法在模板中呈现模型属性的方式。
【解决方案2】:

如果 [Email] 应该是 MVC 模型的数据注释(如 [Required]),那么它不会内置到 ASP.NET MVC 3 中。

所有模型数据注释都在命名空间System.ComponentModel.DataAnnotations中找到。在那里你可以找到像 RequiredAttribute 这样的类。

更新:

添加 Email 属性非常简单:

using System.ComponentModel.DataAnnotations;

namespace YourNamespace
{
    public class EmailAttribute : RegularExpressionAttribute
    {
        public EmailAttribute() : base("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")
        {
        }
    }
}

检查电子邮件地址的最佳或正确正则表达式是什么,这是网络上一个单独且长期的争论。我并不是坚持我的就是其中之一。

【讨论】:

  • 是的..我最终以同样的方式做。正则表达式是。但我问的原因是我希望我的代码是干净的。现在我添加了这些显而易见的属性。
【解决方案3】:

[System.ComponentModel.DataAnnotations.EmailAddressAttribute] 原来是通过正则表达式验证电子邮件(至少在 4.5 中)

【讨论】:

    【解决方案4】:

    看看这个,http://dataannotationsextensions.org/。它具有服务器端和客户端验证功能。 它在下面使用这个正则表达式。

    new Regex(@"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$", RegexOptions.Compiled | RegexOptions.IgnoreCase);
    

    【讨论】:

    • @Chris Marisic,感谢您重新修改此内容。这是在我习惯正确使用 Markdown 之前。哈哈哈。
    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 2011-09-27
    相关资源
    最近更新 更多