更改数据注释中的验证消息

时间:2010-03-13 20:37:54

标签: asp.net-mvc validation entity data-annotations

我的对象具有数据类型为int的字段。当我在这个文本框中输入html格式时,字母不是数字,验证者说 - 字段必须是数字。我该如何更改此消息

 [Required(ErrorMessage = "Введите название")]
    [DisplayName("Название")]
    public int age { get; set; }

2 个答案:

答案 0 :(得分:4)

我没有找到使用数据注释实现此目的的 clean 方法。一种方法是编写自定义模型绑定器,但这对于这样一个简单的任务来说似乎要做很多工作。

实现此目的的另一种方法是向ASP.NET应用程序添加App_GlobalResources文件夹。添加名为Messages.resx的资源文件,其中包含PropertyValueRequired字符串资源。

PropertyValueRequired = "Some custom error message"

Application_Start注册资源类密钥:

protected void Application_Start()
{
    RegisterRoutes(RouteTable.Routes);
    DefaultModelBinder.ResourceClassKey = "Messages";
}

请注意,ASP.NET MVC 2使用PropertyValueInvalid而不是PropertyValueRequired资源键。

IMO使用数据注释来执行验证逻辑是有限的(可能在.NET 4中这将改变)。如果您想完全控制验证逻辑,我建议您使用验证库,例如Fluent ValidationxVal

答案 1 :(得分:2)

我遇到了同样的问题并通过指定只允许正自然数的RegularExpression来解决它。

[Required(ErrorMessage = "Введите название")]
[DisplayName("Название")]
[RegularExpression(@"^[0-9]+$", ErrorMessage = "Поле возраст не является числом")]
public int age { get; set; }

不确定此解决方案是否有任何缺陷。它似乎对我很好。

PS:如果您不想允许前导零使用"^[1-9]+[0-9]*$"

回想起来:我不得不承认,将正则表达式添加到整数是有点奇怪。