繁体   English   中英

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

[英]Uses of Datatype.EmailAddress in asp/.net/mvc

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

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

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

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

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

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

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

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

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

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

Datatype.Emailaddress派生自DataTypeAttribute并添加客户端电子邮件验证,您还需要设置<% Html.EnableClientValidation(); %> <% 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM