我有一个类,它使用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
在验证器中工作?
答案 0 :(得分:2)
在使用每种方法可用的重载后,我发现了以下重载,其中包含一个名为validateAllProeprties
的参数。
当此项设置为true
时,对象已经过属性验证。
Validator.TryValidateObject(this, new ValidationContext(this), results, true);
我不确定您为什么不想验证所有属性,但将此设置为false
或未设置(默认为false
)只会验证所需的属性
这MSDN article解释了。
答案 1 :(得分:1)
要对数据注释验证器使用验证,您应该添加两个引用
Microsoft.Web.Mvc.DataAnnotations.dll
程序集和System.ComponentModel.DataAnnotations.dll
程序集。
然后您需要在Global.asax文件中注册DataAnnotations Model Binder。将以下代码行添加到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; }
}
请参阅here了解文档