我在电子邮件字段中使用此代码:
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email address")]
public string Email { get; set; }
[DataType(DataType.EmailAddress)]
不起作用(不在客户端的服务器上进行验证)。
我不确定是否应该自己实现自定义属性,或者我可以使用MVC 3附带的属性。
如果需要,请您建议我创建自定义属性的解决方案。
我还阅读了一些额外的扩展,例如 http://nuget.org/packages/DataAnnotationsExtensions.MVC3
你会建议我吗?答案 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; }
属性),表单将是提交了一个空的电子邮件地址。