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

时间:2011-09-14 06:26:03

标签: asp.net-mvc fluentvalidation

我收到验证消息“值xxx对yyy无效”。当我为double类型发布不正确的值时会发生这种情况。我不知道如何改变它。

2 个答案:

答案 0 :(得分:7)

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

您可以使用的另一种方法是在视图模型上定义两个属性 - 一个作为字符串,另一个作为可空双精度。您将使用字符串属性进行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);
   }
}

答案 1 :(得分:0)

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

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

如果您想使用带有资源的本地化消息:

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