电子邮件地址属性被忽略。

6

我有一个类,其中定义了属性EmailAddress,它使用System.ComponentModel.DataAnnotations中的属性EmailAddressAttribute:

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有效?

你是否正在使用 System.ComponentModel.DataAnnotations - Matas Vaitkevicius
是的 - 抱歉,我应该在问题中加上那个。 - Darbio
你能否尝试添加以下代码 [Required][DataType(DataType.EmailAddress)][EmailAddress]public string EmailAddress { get; set; } - Matas Vaitkevicius
我没有看到任何明显的错误,我的猜测是缺少[DataType(DataType.EmailAddress)],并且不会有任何提示。.NET框架是4.5吗? - Matas Vaitkevicius
你是否添加了NuGet包DataAnnotationsExtensions? - faby
显示剩余2条评论
2个回答

7

在尝试了每个方法可用的重载后,我找到了以下重载,其中包含一个名为validateAllProperties的参数。

当将其设置为true时,对象的属性将被验证。

Validator.TryValidateObject(this, new ValidationContext(this), results, true);

我不确定为什么你不想验证所有属性,但将其设置为false或未设置(默认为false)将只验证必需的属性。

这篇MSDN文章进行了解释。


1

使用Data Annotation Validators进行验证,您需要添加对Microsoft.Web.Mvc.DataAnnotations.dllSystem.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; }
}

请参考文档这里

谢谢Faby。我会尝试一下。虽然我没有使用MVC(只是数据注释)。之后会汇报的 :-) - Darbio
1
@Darbio,很抱歉我的解决方案没有帮到你。我看到你已经解决了问题,这才是最重要的目标!干得好。 - faby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接