Puis-je valider automatiquement des objets enfants complexes lors de la validation d'un objet parent et d'inclure les résultats dans la population ICollection<ValidationResult>
?
Si j'exécute le code suivant:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace ConsoleApplication1
{
public class Person
{
[Required]
public string Name { get; set; }
public Address Address { get; set; }
}
public class Address
{
[Required]
public string Street { get; set; }
[Required]
public string City { get; set; }
[Required]
public string State { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person person = new Person
{
Name = null,
Address = new Address
{
Street = "123 Any St",
City = "New York",
State = null
}
};
var validationContext = new ValidationContext(person, null, null);
var validationResults = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(person, validationContext, validationResults);
Console.WriteLine(isValid);
validationResults.ForEach(r => Console.WriteLine(r.ErrorMessage));
Console.ReadKey(true);
}
}
}
Je reçois la sortie suivante:
False
[.____]The Name field is required.
Mais je m'attendais à quelque chose de similaire à:
False
[.____]The Name field is required.
[.____]The State field is required.
J'ai offert une prime pour une meilleure solution de validation d'objet enfant, mais j'ai eu des preneurs, idéalement
Je suis toujours surpris que le cadre ne soutient pas cela.
Vous devrez faire votre propre attribut de validateur (par exemple, [CompositeField]
) qui valide les propriétés de l'enfant.