我正在使用流畅的验证和资源文件对站点进行本地化,并且一切正常,除了当我尝试使用验证设置自定义错误时 "When()"
条件。
在下面的例子中:
public class InstructionValidator : AbstractValidator<InstructionModel>
{
public InstructionValidator()
{
RuleFor(x => x.Name)
.Length(0, 50)
.WithMessage(Resources.InvalidError);
RuleFor(x => x.Revision)
.NotNull()
.InclusiveBetween(1, int.MaxValue)
.WithMessage(Resources.InvalidError);
RuleFor(x => x.RevisionDate)
.NotNull()
.When(x => x.Revision > 1)
.WithMessage(Resources.RevisionDateRequiredError);
}
}
前两个规则(用于名称和修订)工作正常,并根据用户选择的文化显示英语或西类牙语消息。
然而,第三条规则,与"when"
条件,将始终显示英文消息。
我检查了网站上使用的所有其他规则,它们是一致的 - 每个人都根据文化集显示英语或西类牙语,除非 "when"
使用条件,则始终为英文。
也许这与 "when"
有关作为服务器与客户端检查?我确实尝试过 "WithLocalizedMessage()"
而不是 "WithMessage()"
,并设置 ValidatorOptions.ResourceProviderType
,但可能仍然无法正常工作。
最佳答案
经过更多测试后,我发现了发生了什么。资源或验证语法没有问题,这是本地化发生的顺序。
我将 [Localize] 过滤器应用于基本 Controller ,它适用于所有内容,但服务器端验证除外,服务器端验证必须在过滤器被触发之前发生。
虽然我仍然不确定如何重做本地化来处理这个问题,但我最初提出的问题已经解决了——将文化集移到验证器中确实会显示正确的错误消息。
关于asp.net-mvc - FluentValidation 自定义消息本地化不适用于 When() 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33021176/