【问题标题】:change validate message in data annotation更改数据注释中的验证消息
【发布时间】:2010-03-13 20:37:53
【问题描述】:

我的对象具有数据类型为 int 的字段。当我在此文本框中输入 html 表单时,字母不编号验证器说-该字段必须是数字。我怎样才能像这样更改此消息

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

【问题讨论】:

  • 为什么这个问题被否决了?请在对问题投反对票时发表评论。恕我直言,这是一个很好的问题。
  • 不是每个人都懂俄语。属性文本应为英文。

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


【解决方案1】:

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

实现此目的的另一种方法是将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 ValidationxVal

【讨论】:

  • 我也遇到了同样的问题。我还从数据注释转移到了 Fluent Validation。我发现 fluent Validation 非常有用,而且易于定制。
  • 您推荐 Fluentvalidation 的任何原因?它比 Enterprise Library Validation 应用程序块更好吗?顺便说一句,xVal 目前已被弃用。
  • 我推荐 FV,因为它是轻量级的,允许以优雅的方式表达复杂的验证规则,它提供了一个 API 用于轻松对这些验证规则进行单元测试,并且与 ASP.NET MVC 有很好的集成。
【解决方案2】:

我遇到了同样的问题,并通过指定一个只允许正自然数的正则表达式来解决它。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多