如何覆盖默认的必需错误消息

How to override default required error message

我有一个旧的 C# MVC 2.0 Web 应用程序。

每当我使用 [Required] 属性时,默认验证错误消息为:

The [whatever] field is required.

我的问题是应用程序不是英文的,所以我基本上必须在所有地方将属性调用更改为 [Required(ErrorMessage = "Le champ [whatever] est requis.")]

有没有一种方法可以覆盖默认错误消息,以便我只需要在需要特定消息时指定它?

我正在寻找类似的东西:

DefaultRequiredMessage = "Le champ {0} est requis.";

您可以创建一个 class 并从 RequiredAttribute 继承它。像这样:

public class CustomRequired: RequiredAttribute
{
    public CustomRequired()
    {
        this.ErrorMessage = "Le champ est requis.";
    }
}

或:

public class CustomRequired: RequiredAttribute
{
    public override string FormatErrorMessage(string whatever)
    {
        return !String.IsNullOrEmpty(ErrorMessage)
            ? ErrorMessage
            : $"Le champ {whatever} est requis.";
    }
}

您应该将 CustomRequired 与您的属性一起使用,而不是 [Required]

请执行以下操作以覆盖默认的必需错误消息:

  • 创建一个继承 RequiredAttributeAdapter 的自定义适配器,如下所示:

public class YourRequiredAttributeAdapter : DataAnnotationsModelValidator<RequiredAttribute>
{
    public YourRequiredAttributeAdapter(ModelMetadata metadata, ControllerContext context, RequiredAttribute attribute)
        : base(metadata, context, attribute)
    {
        if (string.IsNullOrWhiteSpace(attribute.ErrorMessage)
            )
        {
            attribute.ErrorMessageResourceType ="Your resource file";
            attribute.ErrorMessageResourceName = "Keep the key name in resource file as "PropertyValueRequired";
        }
    }

}
  • 在 Global.asax Application_Start() 中注册适配器,如下所示:

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(RequiredAttribute), typeof(YourRequiredAttributeAdapter));

  • 资源文件配置: