【问题标题】:Can Fluent Validation .NET determine error messages sequenceFluent Validation .NET 能否确定错误消息序列
【发布时间】:2015-05-11 09:08:23
【问题描述】:

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

例子:

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

例如,如何确定消息序列以具体显示“需要 B”。在“需要 A”之前。

【问题讨论】:

  • 你能详细描述一下,你想看到哪种行为?不同规则的相同消息,或 B 的消息,取决于 A 值,还是其他?
  • 我添加了一些关于问题的更多细节。我只想对摘要验证消息上显示的消息进行排序。

标签: asp.net-mvc fluentvalidation


【解决方案1】:

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

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

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

返回 ModelStateDictionary 对象中验证消息的无序列表(ul 元素)。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2017-01-18
    相关资源
    最近更新 更多