ClientSide上嵌套属性的FluentValidation

时间:2017-01-27 12:13:27

标签: asp.net-mvc validation fluentvalidation client-side-validation

我有这些模特:

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工厂中获得有关重复类型的异常。

1 个答案:

答案 0 :(得分:2)

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

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

希望这可以帮助你:)