5

是否可以将值传递到错误消息中。我尝试过这样的事情:

RuleFor(x => x.ForeName).Length(1, 255).WithLocalizedMessage(() => String.Format(ValidationErrors.TooLong, "255"));

ValidationErrors 是我的资源文件,其中包含:

TooLong 请使用少于 {0} 个字符。

这:

RuleFor(x => x.ForeName).Length(1, 255).WithLocalizedMessage(() => ValidationErrors.TooLong);

工作正常。

4

1 回答 1

6

在当前发布的 FluentValidation (v2) 版本中,使用本地化消息时不支持此功能。

WithLocalizedMessage 的第一个参数必须始终标识资源属性 - 您不能在其中放置任意代码(例如对 string.format 的调用)。

如果您使用的是非本地化消息,那么您可以这样做:

RuleFor(x => x.Property).Length(1,255).WithMessage("Max number of chars is {0}", "255");

从 FluentValidation v3 开始,您还可以使用这种方法和本地化错误消息,但是还没有二进制版本,所以如果您想使用它,那么您可以从项目站点获取并构建源代码。

作为替代方案,您可以使用 FV 内置的对默认验证器的命名占位符的支持,而不是使用数字占位符。因此,如果您使用的是 .Length(1, 255),那么您可以在错误消息中使用 {MaxLength} 而不是 {0}:

请使用少于 {MaxLength} 个字符。

...并且 FV 将自动将其替换为您输入的最大值。文档中有所有命名占位符的完整列表。

于 2011-06-24T12:24:52.313 回答