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在验证器中工作?

EmailAddressAtribute ignored

在处理了每个方法可用的重载之后,我发现了下面的重载,其中包括一个名为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; }
}

参考这里的文档