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

时间:2012-07-12 14:03:39

标签: asp.net-mvc asp.net-mvc-3 data-annotations

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

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

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

我不确定是否应该自己实现自定义属性,或者我可以使用MVC 3附带的属性。

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

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

你会建议我吗?

5 个答案:

答案 0 :(得分:44)

只需使用[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;}

祝你好运!

答案 1 :(得分:10)

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

它只是有效,你用NuGet

添加他们的库
using DataAnnotationsExtensions;


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

答案 2 :(得分:6)

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

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

数据模型:

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

Razor查看:

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

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

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

答案 3 :(得分:4)

这可能会对某人有所帮助。以下为我工作

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

但是

之后不起作用
[Required(ErrorMessage = "*")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }

我正在使用MVC 5&amp; .NET 4.5

答案 4 :(得分:2)

作为Felix mentioned,问题出在View级别,您需要在EditorFor()而不是View中使用TextBoxFor(),{{1}将渲染:

EditorFor()

将触发验证,而<input type="email" /> 将呈现:

TextBoxFor()

因此,为了验证您输入的电子邮件地址,您需要(与<input type="text" /> 结合使用)才能使用:

EditorFor()

这样,您输入的电子邮件值将始终有效,但如果您没有输入电子邮件的值,则不会发生任何事情(除非您指定了[DataType(DataType.EmailAddress)] public string Email { get; set; } 属性),表单将是提交了一个空的电子邮件地址。