在ASP.NET MVC 3中自定义模型绑定错误消息

时间:2011-06-27 02:36:02

标签: asp.net-mvc validation asp.net-mvc-3 model-binding fluentvalidation

我正在使用带有Fluent验证的ASP.NET MVC 3。我希望我的所有错误消息都措辞和格式相同,无论它们是验证错误消息还是模型绑定错误消息。

假设我有以下视图模型:

[Validator(typeof(PersonValidator))]
public class Person
{
    [ScaffoldColumn(false)] public int    Id   { get; set; }
                            public string Name { get; set; }
                            public int    Age  { get; set; }
}

要使用Fluent验证来验证这一点,我可能会使用以下内容:

public class EditorValidator : AbstractValidator<EditorModel>
{
    public EditorValidator()
    {
        RuleFor(model => model.Month.Value).InclusiveBetween(0, 120)
    }
}

如果用户为Age输入“abc”,则会导致模型绑定错误,而不会导致验证错误。这是因为“abc”不是int。系统甚至不会询问“abc”是否介于0和120之间,因为“abc”无法存储在Age中。

这很好,有道理。问题是产生的错误消息是:

  

字段年龄必须是数字。

我希望格式化的信息和措辞与Fluent Validation生成的其他错误消息一样。在这种情况下,我想:

  

'年龄'必须是数字。

我意识到这只是一个微妙的区别,但我想控制模型绑定错误消息。

如何自定义模型绑定错误消息以匹配Fluent验证使用的错误消息?

2 个答案:

答案 0 :(得分:4)

我不确定是否有另一种方法可以做到这一点,但我使用Data Annotations Extensions,也可以通过NuGet(Install-Package DataAnnotationsExtensions.MVC3)获得这种确切类型的东西。这个包会给你一个IntegerAttribute,从那里你可以指定一个错误信息:

[Integer(ErrorMessage = "'Age' must be a number.")]
public int Age { get; set; }

答案 1 :(得分:0)

在这里看看我的答案:

How to change 'data-val-number' message validation in MVC while it is generated by @Html helper

实际上,这是你提出的一个非常常见的问题,所以你应该在发布之前用Google搜索堆栈溢出。