c# - 如何使用流畅的验证将值传递到错误消息中

标签 c# fluentvalidation

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

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);

工作正常。

最佳答案

在当前发布的 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}:

Please use fewer than {MaxLength} characters.

...FV 会自动将其替换为您输入的最大值。有所有命名占位符的完整列表 in the documentation .

关于c# - 如何使用流畅的验证将值传递到错误消息中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6467016/

上一篇:c# - 解压缩流

下一篇:c# - 类型转换泛型

相关文章:

c# - 如何将域和存储库层公开为服务?

asp.net-mvc - 如何使用 FluentValidation 在客户端验证日期?

c# - ASP .NET 核心 3.0 依赖注入(inject)抛出 System.InsufficientExecutionStackException

asp.net-mvc-3 - 使用 FluentValidation/MVC 3 验证客户端上的复选框

c# - 在 FluentValidation 中为规则集设置消息失败

c# - 在 MediatR 管道上使用多个 FluentValidator

c# - 在 .NET Core 中使用 FluentValidation 和依赖注入(inject)

C#在内存中以特定大小剪切图像而不保存文件

c# - 如何将 BsonDocument 对象反序列化回类

c# - 使用下拉菜单在两个页面之间切换