【问题标题】:Override default ASP.NET MVC message in FluentValidation在 FluentValidation 中覆盖默认的 ASP.NET MVC 消息
【发布时间】:2011-09-14 06:26:02
【问题描述】:

我收到验证消息“值 xxx 对 yyy 无效”。当我为双精度类型发布不正确的值时会发生这种情况。不知道怎么改。

【问题讨论】:

    标签: asp.net-mvc fluentvalidation


    【解决方案1】:

    不幸的是,这不是 FluentValidation 能够覆盖的东西 - MVC 验证的可扩展性模型在许多地方都有些限制,而且我无法找到覆盖此特定消息的方法。

    您可以使用的另一种方法是在您的视图模型上定义两个属性 - 一个作为字符串,一个作为可为空的双精度。您可以将 string 属性用于 MVC 绑定目的,而 double 属性将执行转换(如果可以的话)。然后您可以使用它进行验证:

    public class FooModel {
       public string Foo { get; set; }
    
       public double? ConvertedFoo {
          get {
              double d;
              if(double.TryParse(Foo, out d)) {
                 return d;
              }
              return null;
          }
       }
    }
    
    
    public class FooValidator : AbstractValidator<FooModel> {
       public FooValidator() {
          RuleFor(x => x.ConvertedFoo).NotNull();
          RuleFor(x => x.ConvertedFoo).GreaterThan(0).When(x => x.ConvertedFoo != null);
       }
    }
    

    【讨论】:

    • 您是否尝试与 ASP.NET MVC 团队联系?
    • 是的,我在 MVC2 的预览期间提出了几次,但从未改变过。
    • 据我所知,这甚至不是 MVC。这些消息在.net 框架的深处。见stackoverflow.com/questions/6587816/…
    • 这个错误还在netcore中出现,这么多年了,我们需要使用这个解决方法吗?还是有其他方法可以解决这个问题?
    【解决方案2】:

    您可以使用.WithMessage() 方法自定义错误消息:

    RuleFor(x => x.Foo)
        .NotEmpty()
        .WithMessage("Put your custom message here");
    

    如果您想将本地化消息与资源一起使用:

    RuleFor(x => x.Foo)
        .NotEmpty()
        .WithLocalizedMessage(() => MyLocalizedMessage.FooRequired);
    

    【讨论】:

    • 它不起作用。 ASP.NET 尝试将字符串转换为双精度时出现错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 2020-01-17
    • 2014-03-05
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    相关资源
    最近更新 更多