mvc [DataType(DataType.EmailAddress)没有验证

Gib*_*boK 29 asp.net-mvc data-annotations asp.net-mvc-3

我在电子邮件字段中使用此代码:

    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Email address")]
    public string Email { get; set; }
Run Code Online (Sandbox Code Playgroud)

[DataType(DataType.EmailAddress)] 不起作用(不在客户端的服务器上进行验证).

我不确定是否应该自己实现自定义属性,或者我可以使用MVC 3中包含的属性.

如果需要,请您建议我创建自定义属性的解决方案.

我还阅读了一些额外的扩展,例如 http://nuget.org/packages/DataAnnotationsExtensions.MVC3

你能告诉我吗?

Sar*_*ahK 45

您只需使用[EmailAddress]即可使用常用的DataAnnotations库

using System.ComponentModel.DataAnnotations;
    [Required]
    [EmailAddress]
    public String Email { get; set; }
Run Code Online (Sandbox Code Playgroud)

也仅供参考,这是此验证的正则表达式版本:

    [RegularExpression(@"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-??]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$", ErrorMessage = "Email is not valid")]
    public String Email {get; set;}
Run Code Online (Sandbox Code Playgroud)

祝你好运!

  • 停止使用正则表达式验证电子邮件地址http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/ (5认同)
  • 嘿escist,试试这个来代替:[正则表达式(@"^ [A-ZA-Z0-9](([_\\ - ] [A-ZA-Z0-9] +)*)@([A.? -Za-Z0-9] +)((\\ - ?] [A-ZA-Z0-9] +).*)\([A-ZA-Z] {2,})$",的ErrorMessage ="电子邮件无效")]' (2认同)
  • @RobertKoritnik也许是,但是我相信一家大公司所做的事情比随机评论要重要得多。另外,如果正则表达式被证明是错误的(很可能是这样),则可以对所有人进行集中更新(只需更新.NET)。除了“它是否包含@符号”之外,我仍然讨厌验证,但是与使用正则表达式进行硬编码的人相比,我更喜欢语言功能。 (2认同)

Gib*_*boK 11

目前我已经使用http://dataannotationsextensions.org解决了我的问题

它只是工作,你用NuGet添加他们的库

using DataAnnotationsExtensions;


[Required]
    [DataType(DataType.EmailAddress)]
    [Email]
    public string Email { get; set; }
Run Code Online (Sandbox Code Playgroud)

  • 截至今天:`[EmailAddress]` (3认同)

Fel*_*lix 6

看起来所有答案都集中在数据模型上,而此问题可能会受到View本身的影响.

MVC .NET 4.5上的以下工作正常:

数据模型:

[Required]
[DataType(DataType.EmailAddress)]
[DisplayName("Email")]
public string Email { get; set; }
Run Code Online (Sandbox Code Playgroud)

剃刀查看:

@Html.LabelFor(model => model.Email)
@Html.EditorFor(model => model.Email)
Run Code Online (Sandbox Code Playgroud)

注意:不需要添加[EmailAddress]属性.如果在视图中使用[DataType(DataType.EmailAddress)]和@ Html.EditorFor(),那么你应该没问题.

正如rich.okelly所强调的那样,最后你希望你的输入呈现为<input type="email" />.


小智 5

也许这会对某人有帮助。以下对我有用

[Required(ErrorMessage = "*")]
[DataType(DataType.EmailAddress)]
[EmailAddress]
public string Email { get; set; }
Run Code Online (Sandbox Code Playgroud)

但以下不起作用

[Required(ErrorMessage = "*")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
Run Code Online (Sandbox Code Playgroud)

我在用MVC 5.NET 4.5

  • 似乎 [DataType(DataType.EmailAddress] 属性仅在还指定了 [Required] 属性时才显示。如果您只想验证条目是否存在,则 [EmailAddress] 属性似乎更适合 (2认同)