1

У меня есть эти модели:FluentValidation для вложенных свойств на стороне клиента

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 содержит много полей и у меня есть отдельный валидатор для него. Я хочу иметь только Employee.Id и EventDate, как требуется в AssignmentTask, а не другие из WorkOrderTaskDto, поэтому я очищаю валидаторы в первой строке.

В принципе, он работает хорошо, но только на стороне сервера. Мне кажется, что Fluent генерирует атрибуты проверки на стороне клиента только для не-вложенных полей. Возможно ли подтверждение на стороне клиента для RuleFor(x => x.Dto.Employee.Id).NotEmpty();?

К сожалению, я не могу создать различные валидаторы для WorkOrderTaskDto и просто SetValidator(), потому что в этом случае я получу исключение в фабрике IoC FluentValidation о повторяющихся типах.

ответ

2

К сожалению, FluentAPI генерирует исключение DbEntityValidationException. Итак, если вы хотите установить ограничение NotEmpty (Required) на стороне клиента, вы должны поместить его в модель с помощью DataAnnotation, как в следующем примере.

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

Надеется, что это поможет вам :)

+0

Спасибо за ответ. К сожалению, я не могу использовать его, потому что: 1) классы My Dto находятся в отдельной сборке, и я не хочу добавлять к ним какие-либо атрибуты проверки. 2) Я использую WorkOrderTaskDto в нескольких моделях, а EventDate требуется только в одном из них. –

 Смежные вопросы

  • Нет связанных вопросов^_^