Fluent Validation .NET 能否确定错误消息序列

Can Fluent Validation .NET determine error messages sequence

我使用 Fluent Validation .NET 进行验证。 是否可以从验证摘要中的 "RuleFor" 确定错误消息序列。

示例:

RuleFor(x=>x.A).NotEmpty().WithMessage("A is required.");
RuleFor(x=>x.B).NotEmpty().WithMessage("B is required.");

例如,如何确定消息序列以在 "A is required".

之前具体显示 "B is required."

FluentValidationModelValidationFactory 验证器查询中没有明确的规则排序,这意味着服务器端错误消息的顺序取决于规则声明的顺序,例如如果 A 属性 的规则在 B 的规则之前,那么您将在 ValidationResult 中看到 B 之前的 A 的错误消息。但它仅适用于手动获取验证结果(创建验证器对象并调用 Validate 方法)。

错误进入 ModelState 对象后 - 他们失去了秩序。那是因为 ModelStateDictionary 类型,它将对象存储为字典,而不是列表。

如果我们查看 ValidationSummary 方法的 NDoc 描述,我们会看到:

Returns an unordered list (ul element) of validation messages that are in the ModelStateDictionary object.

但是如果启用了客户端验证 - 那么验证摘要元素会在没有服务器调用的情况下出现,并且它的错误消息顺序与 html 中的输入顺序相同。

结论ViewResult 中保存错误消息顺序的唯一方法是 'manually' 使用验证器,调用验证器并在部分视图或模板中手动迭代 ValidationResult 以创建您需要的标记。但是如果你依赖客户端验证——你可以重新排序表单上的输入。