c# - net - FluentValidation: validación de un modelo de vista que contiene una lista de un objeto
fluentvalidation ruleset (2)
Este código está obsoleto: RuleFor(x => x.Guitars).SetCollectionValidator(new GuitarValidator());
Esto es nuevo:
RuleForEach(x => x.Guitars).SetValidator(new GuitarValidator());
Estoy probando FluentValidation en un proyecto que contiene modelos de vista complejos y leo la documentación aquí, pero no veo cómo configurar las reglas para validar una lista de objetos declarados en mi modelo de vista. En mi ejemplo a continuación, la lista en el modelo de vista contiene 1 o más objetos de Guitarra. Gracias
Ver modelo
[FluentValidation.Attributes.Validator(typeof(CustomerViewModelValidator))]
public class CustomerViewModel
{
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
public string LastName { get; set; }
[Display(Name = "Phone")]
public string Phone { get; set; }
[Display(Name = "Email")]
public string EmailAddress { get; set; }
public List<Guitar> Guitars { get; set; }
}
Clase de guitarra usada en View Model
public class Guitar
{
public string Make { get; set; }
public string Model { get; set; }
public int? ProductionYear { get; set; }
}
Ver Modelo Validador Clase
public class CustomerViewModelValidator : AbstractValidator<CustomerViewModel>
{
public CustomerViewModelValidator()
{
RuleFor(x => x.FirstName).NotNull();
RuleFor(x => x.LastName).NotNull();
RuleFor(x => x.Phone).NotNull();
RuleFor(x => x.EmailAddress).NotNull();
//Expects an indexed list of Guitars here????
}
}
Usted agregaría esto a su CustomerViewModelValidator
RuleFor(x => x.Guitars).SetCollectionValidator(new GuitarValidator());
Así que su CustomerViewModelValidator se vería así:
public class CustomerViewModelValidator : AbstractValidator<CustomerViewModel>
{
public CustomerViewModelValidator()
{
RuleFor(x => x.FirstName).NotNull();
RuleFor(x => x.LastName).NotNull();
RuleFor(x => x.Phone).NotNull();
RuleFor(x => x.EmailAddress).NotNull();
RuleFor(x => x.Guitars).SetCollectionValidator(new GuitarValidator());
}
}
Añadir el GuitarValidator se vería algo así como:
public class GuitarValidator : AbstractValidator<Guitar>
{
public GuitarValidator()
{
// All your other validation rules for Guitar. eg.
RuleFor(x => x.Make).NotNull();
}
}