7

我在验证器中有以下代码:

RuleFor(mb => mb.Amount).
Must((mb, amount) =>
                {
                   var betLimit = _battlesService.GetBetLimit(mb.BattleId);

                   mb.Amount <= betLimit;
                }).
WithMessage("Bet should be less than {0}", "bet limit value should be placed here");

有没有办法将 betLimit 值传递给 WithMessage 方法?我看到的唯一解决方案是将 betLimit 值设置为 ViewModel 的某个属性,然后使用函数在 WithMessage 重载中访问它。但它很丑。

4

1 回答 1

4

由于Amount不用于获取betLimit,所以当您的验证器启动时,您不能将下注限制拉到一个字段中,并在您想要的任何地方使用它吗?就像是:

public ViewModelValidator(IBattlesService battlesService)
{
    var betLimit = battlesService.GetBetLimit();

    RuleFor(mb => mb.Amount).
    Must((mb, amount) =>
                    {
                       mb.Amount <= betLimit;
                    }).
    WithMessage(string.Format("Bet should be less than {0}", "bet limit value should be placed here", betLimit));
    ...
}

更新:

我现在看到您从视图模型中添加了参数。根据 FluentValidation 文档中的第三个示例,您应该能够像这样得到

    public ViewModelValidator(IBattlesService battlesService)
    {
        RuleFor(mb => mb.Amount).
        Must((mb, amount) =>
                        {
                           mb.Amount <= betLimit;
                        }).
        WithMessage("Bet should be less than {0}", mb => battlesService.GetBetLimit(mb.BattleId));
        ...
    }
于 2011-09-16T20:54:15.320 回答