【问题标题】:Fluent Validator for when another property is true当另一个属性为真时的流利验证器
【发布时间】:2020-03-26 13:37:21
【问题描述】:

如果另一个属性“找到”为真,我正在尝试使用 FluentValidation 验证属性“用户名”。

Object Contains:
   string Username
   bool Found

RuleFor(x => x.Username)
    .NotEmpty().DependentRules(() => {
                RuleFor(y => y.Found).Equals(true); //Not valid syntax
            })
    .WithMessage("Not Found");

不幸的是,似乎没有简单的方法可以做到这一点?

【问题讨论】:

    标签: fluentvalidation


    【解决方案1】:

    使用When 子句。

    RuleFor(x => x.Username).NotEmpty().When(x => x.Found);
    

    Working example

    依赖规则有点不同;基本上,依赖规则块中指定的规则只有在它们附加到的规则通过时才会被测试。

    根据doco

    RuleFor(x => x.Surname).NotNull().DependentRules(() => {
      RuleFor(x => x.Forename).NotNull();
    });
    

    只有在姓氏规则通过时,才会运行针对 Forename 的规则。

    【讨论】:

    • 谢谢!如果答案是假布尔值,NotNull() 会起作用吗?我认为 null 不一样?
    • 你能进一步澄清你的问题吗? NotNull() 只是属性验证器的扩展,与NotEmpty() 相同。 RuleFor(x => x.Username).NotNull().When(x => x.Found); 将以相同的方式工作,例如,当 Found 为 true 时,确保 Username 不为空;当 Found 为 false 时,不会测试用户名 NotNull() 验证规则 - 未满足 when 条件
    • 对不起,我在解释问题方面可能很糟糕。除了不同的错误消息,我认为我不需要 NotEmpty。我希望用户名只有在发现为真时才能通过验证。所以如果 'bob' 被测试为一个有效的用户名,那么 found 将是真的并且用户名将是有效的。我可能会以完全错误的方式解决这个问题。
    • 我想我跟着;您想以某种方式验证用户名(可能通过查询一些描述的存储库以确保您有一个具有该用户名的用户),然后如果通过了,您希望将 Found 属性设置为 true。听起来对吗?您打算如何验证用户名是否有效?
    • 没错。我有一个侦听器,它试图在用户键入时验证用户名。找到后将 Found 设置为 true,则表单应该是有效的 :)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2021-09-30
    • 2015-04-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多