在 FluentValidation 中覆盖默认 ASP.NET MVC 消息

发布于 2024-12-04 20:47:00 字数 67 浏览 0 评论 0原文

我收到验证消息“值 xxx 对于 yyy 无效”。当我为双精度类型发布错误的值时,就会发生这种情况。我不知道如何改变它。

I get the validation message "The value xxx is not valid for yyy". It happens when I post incorrect value for double type. I have no idea how to change it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

弱骨蛰伏 2024-12-11 20:47:00

不幸的是,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);
   }
}

Unfortunately this isn't something that FluentValidation has the ability to override - the extensibility model for MVC's validation is somewhat limited in many places, and I've not been able to find a way to override this particular message.

An alternative approach you could use is to define two properties on your view model - one as a string, and one as a nullable double. You would use the string property for MVC binding purposes, and the double property would perform a conversion (if it can). You can then use this for validation:

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);
   }
}
最美的太阳 2024-12-11 20:47:00

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

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

如果您想对资源使用本地化消息:

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

You could use the .WithMessage() method to customize the error message:

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

and if you want to use localized messages with resources:

RuleFor(x => x.Foo)
    .NotEmpty()
    .WithLocalizedMessage(() => MyLocalizedMessage.FooRequired);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文