Validator.TryValidateObject всегда возвращает true во всех случаях - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть класс, который имеет два свойства. Я хочу проверить один из них, это другой класс, и я уже указал [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, когда очевидно, что объект не должен пройти проверку.

Что я делаю не так?

1 Ответ

0 голосов
/ 06 апреля 2020

Проблема была Я не указывал правильный 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);
...