asp.net-mvc - FluentValidation 自定义消息本地化不适用于 When() 条件

标签 asp.net-mvc localization fluentvalidation

我正在使用流畅的验证和资源文件对站点进行本地化,并且一切正常,除了当我尝试使用验证设置自定义错误时 "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/

相关文章:

asp.net-mvc - 将 MVC2 Helpers 移至 MVC3 razor View 引擎

c# - 将具有对象列表的 json 绑定(bind)到模型

asp.net-mvc - 用户访问网站时记录 MVC

c# - Fluent 验证和 Must 自定义验证

c# - 如何在 View 上显示流利验证错误消息

c# - 流畅验证 : Is it possible to add a RuleSet while invoking a validator using ValidateAndThrow

c# - 用户认证

c# - 带有文化的 MVC5 本地化 - 拥有区域的问题

django - 让Django管理员使用翻译后的字段名称

android - 获取本地化的短日期模式作为字符串?