1

FluentValidation 3当我使用重载的 WithMessage 方法时,我使用并且我遇到了一个奇怪的问题。

复合格式字符串的格式不正确。我得到“ true”而不是{0}我的格式字符串。所有其他格式项目都不会被替换。

例如:

 public class MyModelValidator : AbstractValidator<MyModel>
    {
        public MyModelValidator()
        {
            RuleFor(x => x.Caption).NotNull().WithMessage("{0} ----- {1}", "one", "two" );
        }
    }

我得到的验证字符串是:“ true----- {1}”而不是“ one----- two”。

你能解释一下,我的代码有什么问题吗?

4

1 回答 1

1

嗯,响应是......在源代码中。

您使用以下重载(我必须说,它的用法并不清楚)WithMessage

public static IRuleBuilderOptions<T, TProperty> WithMessage<T, TProperty>(this IRuleBuilderOptions<T, TProperty> rule, string errorMessage, params object[] formatArgs) {
    var funcs = ConvertArrayOfObjectsToArrayOfDelegates<T>(formatArgs);
    return rule.WithMessage(errorMessage, funcs);
    }

所以“一”和“二”被更改为一个数组 Func<T, object>,当然,这会导致你的代码出现奇怪的行为......

你应该string.Format在你的情况下使用

WithMessage(string.Format("{0} ----- {1}", "one", "two" ));

顺便说一句,FluentValidation 消息“已经预先格式化”:{0}在 WithMessage 中使用的目标是修改{0}. 例如,NotNull 具有“1 个参数”的预格式化消息。我认为这就是为什么你的{0}被转化为“真实”的原因。

于 2012-08-29T10:01:00.220 回答