【问题标题】:FluentValidation for nested properties on the ClientSide客户端上嵌套属性的 FluentValidation
【发布时间】:2017-01-27 12:13:26
【问题描述】:

我有这些模型:

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 =&gt; x.Dto.Employee.Id).NotEmpty(); 进行客户端验证?

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

【问题讨论】:

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


    【解决方案1】:

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

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

    希望对你有帮助:)

    【讨论】:

    • 感谢您的回复。不幸的是我不能使用它,因为:1)我的 Dto 类在单独的程序集中,我不想向它们添加任何验证属性。 2) 我在多个模型中使用 WorkOrderTaskDto,而 EventDate 仅在其中一个模型中是必需的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多