1

je ces modèles:FluentValidation pour les propriétés imbriquées sur le InfoClient

public class AssignmentTaskModel 
    { 
     public AssignmentTaskModel() { } 

     public AssignmentTaskModel(WorkOrderTaskDto task) 
     { 
      Task = task; 
     } 

     public WorkOrderTaskDto Task { get; set; } 
    } 

public class AssignmentTaskModelValidator : AbstractValidator<AssignmentTaskModel> 
{ 
    public AssignmentTaskModelValidator() 
    { 
     RuleFor(x => x.Dto).Configure(x => x.ClearValidators()); 

     RuleFor(x => x.Dto.Id).NotEmpty(); 
     RuleFor(x => x.Dto.Employee.Id).NotEmpty(); 
     RuleFor(x => x.Dto.EventDate).NotEmpty(); 
    } 
} 

WorkOrderTaskDto contient beaucoup de domaines et j'ai un validateur séparé pour elle. Je ne souhaite avoir que Employee.Id et EventDate comme requis dans AssignmentTask et pas d'autres dans WorkOrderTaskDto, c'est pourquoi j'efface les validateurs en première ligne.

Fondamentalement, cela fonctionne bien mais seulement du côté serveur. Il me semble que Fluent génère des attributs de validation côté client uniquement pour les champs non imbriqués. Est-il possible d'avoir une validation côté client pour RuleFor(x => x.Dto.Employee.Id).NotEmpty();?

Malheureusement, je ne peux pas créer différents validateurs pour WorkOrderTaskDto et simplement SetValidator() car dans ce cas, j'obtiendrai une exception dans la fabrique IoC FluentValidation concernant les types en double.

Répondre

2

Malheureusement, FluentAPI génère uniquement l'exception DbEntityValidationException. Ainsi, si vous voulez définir la contrainte NotEmpty (Obligatoire) du côté client, vous devez le placer sur le modèle à l'aide de DataAnnotation, comme dans l'exemple suivant.

[Required] 
public DateTime EventDate { get; set; } 

Hope this vous aider :)

+0

Merci pour la réponse. Malheureusement, je ne peux pas l'utiliser parce que: 1) Mes classes Dto sont dans l'assembly séparé et je ne veux pas ajouter d'attributs de validation pour eux. 2) J'utilise WorkOrderTaskDto dans plusieurs modèles et EventDate n'est requis que dans l'un d'entre eux. –