asp / .net / mvc中Datatype.EmailAddress的使用

我有一个帐户模型,我在其中使用电子邮件地址作为用户名

public class RegisterModel { [Required] [Display(Name = "Email Address")] [DataType(DataType.EmailAddress)] public string UserName { get; set; } 

我设计了一个自定义类来validation电子邮件。 但我最近注意到了DataType.EmailAddress 。 我尝试使用上面代码中显示的此数据类型来检查我是否可以在没有我的自定义类的情况下validation用户名但是它失败了。 所以我的问题是这个DataType在.NET是如何有用的。 它似乎在我的注册表上无所作为。

编辑:它甚至可以validation正则表达式。 例如,用户名: SS, ssssss, tttt, etc作为有效电子邮件传递。

编辑:人我有一个类来validation后面的代码中的电子邮件。 我知道帽子是validation电子邮件的复杂性。 我不是问如何validation电子邮件。 我只是问这个数据类型的用法。

所以,你问这个数据类型不是为什么不validation,对吗? 根据MSDN,DataType属性主要用于格式化而不是validation(您已经学习过)。 此属性应该执行的操作是,在使用Html.DisplayFor()帮助程序时,将字段呈现为可单击的超链接。

 @Html.DisplayFor(x=>x.UserName) 

呈现

 {0} 

另外,正如Zhaph在下面的评论中指出的那样,在Html.EditorFor()它将生成HTML 5电子邮件输入,如下所示:

  

来自MSDN

以下示例使用DataTypeAttribute自定义AdventureWorksLT数据库中customer表的EmailAddress数据字段的显示。 电子邮件地址显示为超链接,而不是ASP.NET动态数据从内部数据类型推断出的简单文本。

DataType不会触发任何服务器端validation。 但是,由于使用DataType.EmailAddress MVC 4将使HTML输入使用type="email" ,这反过来使jQuery Validation在客户端上执行Regexvalidation。

.NET 4.5引入了[EmailAddress]属性,它是DataTypeAttribute的子类。 通过使用[EmailAddress]您可以获得客户端和服务器端validation。

您可以使用EmailAddress数据注释或正则表达式来解决此问题。 日期类型用于告诉html帮助器呈现视图的html。

 [EmailAddress] [RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = "Must be a valid Email Address")] 

Datatype.Emailaddress派生自DataTypeAttribute并添加客户端电子邮件validation,您还需要设置<% Html.EnableClientValidation(); %> <% Html.EnableClientValidation(); %>在相应的视图中。

或者,您可以使用EmailAddress (这执行服务器端validation)使用DataAnnotations库

 using System.ComponentModel.DataAnnotations; [Required] [EmailAddress] public String Email { get; set; } 

这是validation电子邮件地址的正则表达式

 [Required(ErrorMessage="Email is required")] [RegularExpression(@"[A-Za-z0-9._%+-]+[A-Za-z0-9.-]+\.[A-Za-z] {2,4}", public String Email {get; set;} 

您还可以创建自定义电子邮件validation属性。

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx