我有一个帐户模型,我使用电子邮件地址作为用户名
public class RegisterModel
{
[Required]
[Display(Name = "Email Address")]
[DataType(DataType.EmailAddress)]
public string UserName { get; set; }
我设计了一个自定义类来验证电子邮件。但我最近注意到DataType.EmailAddress
。我尝试使用上面代码中显示的此数据类型来检查我是否可以在没有我的自定义类的情况下验证用户名但是它失败了。所以我的问题是这个DataType在 .NET
中有用吗?它似乎在我的注册表上无所作为。
编辑:它甚至可以对正则表达式进行验证。例如,用户名:SS, ssssss, tttt, etc
全部作为有效电子邮件传递。
编辑:人我有一个类来验证后面代码中的电子邮件。我知道帽子是验证电子邮件的复杂性。我不是问如何验证电子邮件。我只是询问这种数据类型的用法。
答案 0 :(得分:13)
所以,你问这个数据类型不是为什么不验证,对吗?根据MSDN,DataType属性主要用于格式化而不是验证(您已经学习过)。该属性应该做的是,在使用Html.DisplayFor()
帮助器时,将该字段渲染为可单击的超链接。
@Html.DisplayFor(x=>x.UserName)
呈现
<a href="mailto:{0}">{0}</a>
此外,正如Zhaph在下面的评论中指出的那样,在Html.EditorFor()
中使用它会产生HTML 5电子邮件输入,如下所示:
<input type="email".../>
来自MSDN
以下示例使用DataTypeAttribute来自定义 显示客户表的EmailAddress数据字段 AdventureWorksLT数据库。电子邮件地址显示为 超链接而不是ASP.NET动态数据的简单文本 从内在数据类型推断出来。
答案 1 :(得分:12)
DataType
不会触发任何服务器端验证。但是,由于使用DataType.EmailAddress
的MVC 4将使HTML输入使用type="email"
,这反过来使jQuery Validation在客户端上执行Regex验证。
.NET 4.5引入了[EmailAddress]
属性,DataTypeAttribute
的子类。通过使用[EmailAddress]
,您可以获得客户端和服务器端验证。
答案 2 :(得分:4)
您可以使用EmailAddress数据注释或正则表达式来解决此问题。日期类型用于告诉html帮助器呈现视图的html。
[EmailAddress]
[RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = "Must be a valid Email Address")]
答案 3 :(得分:2)
Datatype.Emailaddress
派生自DataTypeAttribute
并添加客户端电子邮件验证,您还需要在相应的视图中设置<% Html.EnableClientValidation(); %>
。
或者,您可以使用EmailAddress
使用DataAnnotations库(这会执行服务器端验证)
using System.ComponentModel.DataAnnotations;
[Required]
[EmailAddress]
public String Email { get; set; }
这是验证电子邮件地址的正则表达式
[Required(ErrorMessage="Email is required")]
[RegularExpression(@"[A-Za-z0-9._%+-]+[A-Za-z0-9.-]+\.[A-Za-z] {2,4}",
public String Email {get; set;}
您还可以创建自定义电子邮件验证属性。
http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx