我有这些模特:
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工厂中获得有关重复类型的异常。
答案 0 :(得分:2)
不幸的是,FluentAPI只生成DbEntityValidationException异常。因此,如果要在客户端设置NotEmpty(必需)约束,则必须使用DataAnnotation将其放在模型上,如下例所示。
[Required]
public DateTime EventDate { get; set; }
希望这可以帮助你:)