Локализация сообщений об ошибках в ASP.NET MVC 2 (атрибуты проверки по умолчанию)

Я работаю на многоязычном веб-сайте, и я хочу локализовать сообщения об ошибках проверки для большинства атрибутов ValidationAttribute, таких как [Requried]

Я знаю, что это можно сделать как Фил Хаак показал в этом статья.

[Required(ErrorMessageResourceType = typeof(Resources), 
ErrorMessageResourceName = "Required")]

но я хочу настроить сообщение об ошибке так, как я сделал с моими атрибутами проверки:

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property,
 AllowMultiple = false,
 Inherited = true)]
public sealed class ValidateminRequiredNonalphanumericCharactersAttribute
: ValidationAttribute
{
 private const string _defaultErrorMessage = // Message From Resource Here ( i will be using two variables in this message ) 
 private readonly int _minnonalphanumericCharactersCounter = Membership.Provider.MinRequiredNonAlphanumericCharacters;
 public ValidateminRequiredNonalphanumericCharactersAttribute()
 : base(_defaultErrorMessage)
 {
 }
 public override string FormatErrorMessage(string name)
 {
 return String.Format(CultureInfo.CurrentUICulture, 
 ErrorMessageString, name, _minnonalphanumericCharactersCounter);
 }
 public override bool IsValid(object value)
 {
 string valueAsString = value as string;
 if (String.IsNullOrEmpty(valueAsString))
 return false;
 int nonalphanumericCharactersCounter = 0;
 char[] password = valueAsString.ToCharArray();
 foreach (char c in password)
 {
 if (!char.IsNumber(c) && !char.IsLetter(c))
 nonalphanumericCharactersCounter++;
 }
 return (nonalphanumericCharactersCounter >= _minnonalphanumericCharactersCounter);
 }
}

любая идея?

1 ответ

Я понял, как это делается. это действительно просто и прямо.

Что я сделал, так это то, что я создал свой собственный RequiredAttribute. вместо использования встроенного RequiredAttribute.

Единственная нижняя сторона заключается в том, что вам нужно будет реализовать логику этого валидатора самостоятельно.

Я знаю, что некоторые могут подумать над тем, чтобы переделать то, что уже есть. (изобретать колесо), но таким образом я буду иметь полный контроль над логикой Validator и сообщением об ошибке.

Как вы можете видеть, логика реализована в методе IsValid() ниже.

Вот класс RequiredAttribute, который я создал:

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, 
 AllowMultiple = true, 
 Inherited = true)]
public sealed class RequiredAttribute : ValidationAttribute
{
 private const string _defaultErrorMessage = // Error Message
 // Notice that i can include the filed name in the error message 
 // which will be provided in the FormatErrorMessage Method 
 public RequiredAttribute()
 : base(_defaultErrorMessage)
 {
 }
 public override string FormatErrorMessage(string name)
 {
 return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString,
 name);
 }
 public override bool IsValid(object value)
 {
 if (value == null || String.IsNullOrWhiteSpace(Convert.ToString(value)))
 return false;
 else
 return true;
 }
}

теперь, когда дело доходит до использования Validator, вам нужно будет предоставить полную ссылку на ваш новый класс, поскольку он столкнется со стандартным встроенным классом System.ComponentModel.DataAnnotations.RequiredAttribute в моем примере выше.

в моем случае это выглядит так:

[Amaly.Data.Validators.Required]
 public string Username { get; set; }

Надеюсь, это было полезно.

licensed under cc by-sa 3.0 with attribution.