EmailAddressAtribute被忽略

时间:2014-07-16 14:04:22

标签: c# validation data-annotations

我有一个类,它使用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在验证器中工作?

2 个答案:

答案 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了解文档