首页 > 解决方案 > Validator.TryValidateObject 在所有情况下始终返回 true

问题描述

我有一个有两个属性的类。我想验证其中一个,这是另一个类,我已经 [Required(ErrorMessage = "Error message", AllowEmptyStrings = false)]在我要验证的每个属性上都说明了。

public partial class Factura
{
    [JsonProperty("Cabecera")]
    public Cabecera Cabecera { get; set; }
    public string Imagen { get; set; }
}

public partial class Cabecera
{
    [Required(ErrorMessage = "Debe especificarse un emisor", AllowEmptyStrings = false)]
    [JsonProperty("Emisor")]
    public string Emisor { get; set; }

    [Required(ErrorMessage = "Debe especificarse un número de factura", AllowEmptyStrings = false)]
    [JsonProperty("Factura")]
    public string Factura { get; set; }
}

验证的实际执行:

var test = new Factura();
var errors = new List<ValidationResult>();
Validator.TryValidateObject(test, new ValidationContext(test), errors, true);

当对象明显不应该通过验证时,Validator.TryValidateObject(test, new ValidationContext(test), errors, true);总是返回。true

我究竟做错了什么?

标签: c#data-annotations

解决方案


问题是我没有指定正确的ValidationContext(实际上是Cabecera类和属性),因为我假设(没有参数)创建“父”类本身的 ValidationContext 将“神奇地”使用DataAnnotations.

请注意您要验证的内容以及ValidationContext实际创建的内容!

var test = new Factura();
test.Cabecera = new Cabecera();
var errors = new List<ValidationResult>();
Validator.TryValidateObject(test.Cabecera, new ValidationContext(test.Cabecera), errors, true);

推荐阅读