2010-03-13 78 views
7

我的对象具有数据类型为int的字段。当我把这个文本框中的HTML格式信件不是数字验证器说 - 该字段必须是一个数字。我怎样才能改变这样更改数据注释中的验证消息

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

为什么这个问题被低估了?请在回答问题时留下评论。恕我直言,这是一个很好的问题。 – 2010-03-14 09:33:36

+0

不是每个人都懂俄语。属性文本应该是英文的。 – 2012-06-29 22:43:40

回答

4

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

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

PropertyValueRequired = "Some custom error message" 

在你Application_Start注册资源类键:

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

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

IMO使用数据注释来执行验证逻辑是有限的(也许在.NET 4中这将改变)。如果你想完全控制验证逻辑,我会推荐你​​使用验证库,如Fluent ValidationxVal

+0

我有完全相同的问题。我也从数据注释转移到Fluent验证。我发现流利的验证非常有用,并且易于定制。 – 2010-03-23 10:26:01

+0

您推荐Fluentvalidation的原因是什么?它比Enterprise Library Validation应用程序块更好吗?顺便说一下,xVal目前已被弃用。 – 2012-06-30 00:29:22

+0

我推荐FV,因为它是轻量级的,允许以优雅的方式表达复杂的验证规则,它提供了一个用于轻松单元测试这些验证规则的API,并且与ASP.NET MVC有了很好的集成。 – 2012-06-30 06:57:25

2

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

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

不知道这个解决方案是否存在任何问题。它似乎为我工作得很好。

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

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