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。 –