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包含很多领域,我有这方面的独立验证。我只想要AssignmentTask中只有Employee.Id和EventDate,而不是WorkOrderTaskDto中的其他人,这就是为什么我要在第一行清除验证器。

基本上,它运行良好,但只在服务器端。在我看来,Fluent只为非嵌套字段生成客户端验证属性。是否有可能为RuleFor(x => x.Dto.Employee.Id).NotEmpty();进行客户端验证?

不幸的是,我无法为WorkOrderTaskDto和SetValidator()创建不同的验证器,因为在这种情况下,我将在IoC FluentValidation工厂中获取有关重复类型的异常。

回答

2

不幸的是,FluentAPI只生成DbEntityValidationException异常。因此,如果您想在客户端设置NotEmpty(必需)约束,则必须使用DataAnnotation将其放在模型上,如下面的示例所示。

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

希望这有助于你:)

+0

谢谢你的答复。不幸的是我不能使用它,因为:1)我的Dto类在单独的程序集中,我不想向它们添加任何验证属性。 2)我在几个模型中使用WorkOrderTaskDto,并且仅在其中一个模型中需要EventDate。 –