8

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

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

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

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

编辑:人们我有一个类来验证背后代码中的电子邮件。我知道验证电子邮件的复杂性。我不是在问如何验证电子邮件。我只是在询问这种数据类型的用途。

4

4 回答 4

16

所以,你在问这个数据类型为什么不验证,对吗?根据 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 自定义 AdventureWorksLT 数据库中客户表的 EmailAddress 数据字段的显示。电子邮件地址显示为超链接,而不是 ASP.NET 动态数据从内部数据类型推断的简单文本。

于 2013-10-17T15:22:26.090 回答
13

DataType单独不会触发任何服务器端验证。但是,由于 MVC 4 usingDataType.EmailAddress将使 HTML 输入 use type="email",这反过来又使 jQuery Validation 在客户端执行 Regex 验证。

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

于 2014-02-09T04:02:01.270 回答
4

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

[EmailAddress]
[RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage = "Must be a valid Email Address")]
于 2013-10-17T11:53:56.153 回答
2

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

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

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

于 2013-10-17T12:30:50.280 回答