我在电子邮件字段中使用此代码:
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email address")]
public string Email { get; set; }
[DataType(DataType.EmailAddress)]
不起作用(验证不会在不在客户端的服务器上发生)。
我不确定是否应该自己实现自定义属性,或者我可以使用MVC 3中包含的属性。
如果需要,请您建议我创建自定义属性的解决方案。
我还阅读了一些额外的扩展,例如http://nuget.org/packages/DataAnnotationsExtensions.MVC3
你能告诉我吗?
您只需使用[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;}
祝你好运!
目前我使用DataAnnotationsExtensions解决了我的问题
它只是工作,你用NuGet添加他们的库
using DataAnnotationsExtensions;
[Required]
[DataType(DataType.EmailAddress)]
[Email]
public string Email { get; set; }
看起来所有答案都集中在数据模型上,而此问题可能会受到View本身的影响。
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" />
。
可能这对某人有帮助。以下为我工作
[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
作为Felix mentioned,问题是在View
级别,你需要在你的EditorFor()
而不是View
使用TextBoxFor()
,EditorFor()
将呈现:
<input type="email" />
这将触发验证,而TextBoxFor()
将呈现:
<input type="text" />
因此,为了验证您输入的电子邮件地址,您需要(与EditorFor()
结合使用)仅使用:
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
这样,您输入的电子邮件值将始终有效,但如果您没有输入电子邮件的值,则不会发生任何事情(除非您指定了[Required]
属性),表单将以空的电子邮件地址提交。