【问题标题】:FluentValidation Validate Method throwing an excepionFluentValidation 验证方法抛出异常
【发布时间】:2016-05-05 18:10:31
【问题描述】:

我在使用 FluentValidation 库时遇到了一些问题。

我有一个非常小的模型
`

[FluentValidation.Attributes.Validator(typeof(PersonValidator))]
 public class PersonModel
{
  public string Name { get; set; }
  public Nullable<short> Type { get; set; }
}

`

有一个验证器类

public class PersonValidator : AbstractValidator<PersonModel>
{   
    public PersonValidator()
    {

        RuleFor(x => x.Name)
        .Length(1, 5)
            .WithLocalizedMessage(() => BaseValidationResource.LengthValidationMessage, 1, 5);


    }
}

我有一个控制器

public ActionResult Index()
    {

        var model = new PersonModel();
        model.Name = "John Doe";

        var validator = new PersonValidator();
        var results = validator.Validate(model);
        var error = GetModelErrors();

        return View(model);
    }

到目前为止一切都很好,问题是当程序执行时,它与 ; var results = validator.Validate(model); 它会抛出 SystemFormatException。

validate 方法不应该只返回一个包含指示模型是否有效的布尔字段和错误列表的对象,而不是抛出异常。

PS:我知道这个特定的验证也可以使用 DataAnnotations 来完成,但我想使用 Fluentvalidation,因为它更灵活。

提前感谢您的帮助。

【问题讨论】:

  • 什么是BaseValidationResource.LengthValidationMessage
  • 哦,我只是指向资源文件上的错误消息,因为本地化
  • 你能把代码贴出来吗?
  • @RIc 抱歉回复晚了。我什至没有考虑资源文件,但是在您要求查看它之后,我去注释掉显示错误消息的行,然后神奇地停止了轰炸方法。仔细检查文件后,我找到了问题的根源。非常感谢您的帮助,我已经花了一天多的时间,如果没有您的临床观察,我永远不会找到解决方案。
  • 可能是字符串格式问题,在没有看到的情况下猜测!很高兴它已修复

标签: c# asp.net-mvc validation fluentvalidation


【解决方案1】:

正如@RIc 指出的那样,我的资源文件存在字符串格式问题。

在我的验证器上我有这一行

 RuleFor(x => x.Name)
        .Length(1, 5)
            .WithLocalizedMessage(() => BaseValidationResource.LengthValidationMessage, 1, 5);

它指向资源文件并传递了2个参数。但在我的资源文件中,我期待 3 个参数(属性名称、最小值、最大值)。

但是我使用了错误的注释。下面是资源文件的前后版本。

【讨论】:

    猜你喜欢
    • 2020-01-08
    • 2011-10-13
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多