32

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

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

[DataType(DataType.EmailAddress)]不起作用(不在客户端的服务器上不会发生验证)。

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

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

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

你会推荐给我吗?

4

6 回答 6

50

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

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

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

    [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;}

祝你好运!

于 2012-07-12T14:20:40.407 回答
12

目前我已经使用 DataAnnotationsExtensions 解决了我的问题

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

using DataAnnotationsExtensions;


[Required]
    [DataType(DataType.EmailAddress)]
    [Email]
    public string Email { get; set; }
于 2012-07-12T14:15:37.750 回答
6

看起来所有的答案都集中在数据模型上,而这个问题可能会受到视图本身的影响。

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

数据模型:

[Required]
[DataType(DataType.EmailAddress)]
[DisplayName("Email")]
public string Email { get; set; }

剃刀视图:

@Html.LabelFor(model => model.Email)
@Html.EditorFor(model => model.Email)

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

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

于 2014-08-29T00:10:53.400 回答
4

可能这对某人有帮助。以下对我有用

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

但以下不起作用

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

我正在使用MVC 5&.NET 4.5

于 2014-08-27T20:35:08.173 回答
2

正如菲利克斯所提到的,问题出在View关卡上,您需要EditorFor()在您的View而不是使用中TextBoxFor()EditorFor()将呈现:

<input type="email" />

这将触发验证,而TextBoxFor()将呈现:

<input type="text" />

因此,为了验证您输入的电子邮件地址,您只需要(结合EditorFor())使用:

[DataType(DataType.EmailAddress)]
public string Email { get; set; }

这样,您输入的电子邮件值将始终得到验证,但如果您不输入电子邮件值,则不会发生任何事情(除非您指定了[Required]属性),表单将使用空电子邮件地址提交。

于 2016-05-15T15:25:07.880 回答
0

[DataType(DataType.EmailAddress)]无法识别@[EmailAddress]无法识别.com,所以使用RegularExpression

[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")]
于 2021-12-29T07:09:11.607 回答