EmailAddressAtribute ignored
本文关键字:ignored EmailAddressAtribute | 更新日期: 2023-09-27 18:13:22
我有一个类,它定义属性EmailAddress
与属性EmailAddressAttribute
来自System.ComponentModel.DataAnnotations
:
public class User : Entity
{
[EmailAddress]
public string EmailAddress { get; set; }
[Required]
public string Name { get; set; }
}
public class Entity
{
public ICollection<ValidationResult> Validate()
{
ICollection<ValidationResult> results = new List<ValidationResult>();
Validator.TryValidateObject(this, new ValidationContext(this), results);
return results;
}
}
当我将EmailAddress
的值设置为无效电子邮件时(例如:'test123'), Validate()
方法告诉我实体是有效的。
RequiredAttribute
验证正在工作(例如将Name
设置为null
会显示验证错误)。
如何让EmailAddressAttribute
在验证器中工作?
在处理了每个方法可用的重载之后,我发现了下面的重载,其中包括一个名为validateAllProeprties
的参数。
当设置为true
时,对象被属性验证。
Validator.TryValidateObject(this, new ValidationContext(this), results, true);
我不知道为什么你不想验证所有属性,但是将此设置为false
或不设置(默认为false
)只会验证所需的属性。
使用您应该添加两个引用的数据注释验证器的验证Microsoft.Web.Mvc.DataAnnotations.dll
组件和System.ComponentModel.DataAnnotations.dll
组件
则需要在全局中注册DataAnnotations模型绑定器。asax文件。将以下代码行添加到Application_Start()
事件处理程序中,使Application_Start()
方法看起来像这样:
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();
}
之后,您已经将dataAnnotationsModelBinder
注册为整个ASP的默认模型绑定器。. NET MVC应用程序
那么你的代码应该可以正常工作
public class User : Entity
{
[EmailAddress]
public string EmailAddress { get; set; }
[Required]
public string Name { get; set; }
}
参考这里的文档