我的对象具有数据类型为int的字段。当我把这个文本框中的HTML格式信件不是数字验证器说 - 该字段必须是一个数字。我怎样才能改变这样更改数据注释中的验证消息
[Required(ErrorMessage = "Введите название")]
[DisplayName("Название")]
public int age { get; set; }
我的对象具有数据类型为int的字段。当我把这个文本框中的HTML格式信件不是数字验证器说 - 该字段必须是一个数字。我怎样才能改变这样更改数据注释中的验证消息
[Required(ErrorMessage = "Введите название")]
[DisplayName("Название")]
public int age { get; set; }
这个消息我还没有找到一个干净方式实现这一目标使用数据注释。一种方法是编写一个自定义模型绑定器,但这对于这样一个简单的任务似乎需要做很多工作。
实现此目的的另一种方法是将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使用,而不是PropertyValueInvalid
PropertyValueRequired
资源键。
IMO使用数据注释来执行验证逻辑是有限的(也许在.NET 4中这将改变)。如果你想完全控制验证逻辑,我会推荐你使用验证库,如Fluent Validation或xVal。
我有完全相同的问题。我也从数据注释转移到Fluent验证。我发现流利的验证非常有用,并且易于定制。 – 2010-03-23 10:26:01
您推荐Fluentvalidation的原因是什么?它比Enterprise Library Validation应用程序块更好吗?顺便说一下,xVal目前已被弃用。 – 2012-06-30 00:29:22
我推荐FV,因为它是轻量级的,允许以优雅的方式表达复杂的验证规则,它提供了一个用于轻松单元测试这些验证规则的API,并且与ASP.NET MVC有了很好的集成。 – 2012-06-30 06:57:25
我遇到了同样的问题,并通过指定只允许正自然数的RegularExpression解决它。
[Required(ErrorMessage = "Введите название")]
[DisplayName("Название")]
[RegularExpression(@"^[0-9]+$", ErrorMessage = "Поле возраст не является числом")]
public int age { get; set; }
不知道这个解决方案是否存在任何问题。它似乎为我工作得很好。
PS:如果您不想允许前导零使用"^[1-9]+[0-9]*$"
。
回想起来:我不得不承认,虽然将正则表达式添加到整数有点奇怪。
为什么这个问题被低估了?请在回答问题时留下评论。恕我直言,这是一个很好的问题。 – 2010-03-14 09:33:36
不是每个人都懂俄语。属性文本应该是英文的。 – 2012-06-29 22:43:40