ruleset net aspnetcore c# asp.net-mvc-3 fluentvalidation

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(); } }