Проблема с пользовательской аннотацией данных

#c# #.net #data-annotations

#c# #.net #данные-аннотации

Вопрос:

У меня проблема с пользовательской аннотацией данных.

 public class RequiredInt32 : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value != null)
        {
            if (Convert.ToInt32(value) == 0)
            {
                return new ValidationResult("custom-message");
            }
        }
        return ValidationResult.Success;
    }
}
  

У меня есть этот код. Если условие выполнено, no возвращает «пользовательское сообщение», возвращает мне «Поле недопустимо». Для меня верните сообщение, которое я хочу, мне нужно указать его явно.

[RequiredInt32 (ErrorMessage = @ «пользовательское сообщение»)]

Что у меня не так и как я могу сделать, чтобы получить сообщение по умолчанию. Спасибо!

Комментарии:

1. Вам также необходимо переопределить FormatErrorMessage : msdn.microsoft.com/en-us/library/cc668224.aspx

Ответ №1:

Если вы хотели настроить сообщение об ошибке форматирования, вы можете определить такой атрибут:

 public class RequiredInt32 : ValidationAttribute
{
    private const string _customFormat = "{0} is not valid";

    private string _fieldName;

    public RequiredInt32(string fieldName)
        : base(_customFormat)
    {
        _fieldName = fieldName;
    }

    public override string FormatErrorMessage(string name)
    {
        return string.Format(ErrorMessageString, name);
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value != null)
        {
            if (Convert.ToInt32(value) == 0)
            {
                return new ValidationResult(FormatErrorMessage(_fieldName));
            }
        }
        return ValidationResult.Success;
    }
}
  

Использование:

 [RequiredInt32("MyField")]
public int NumberProperty {get;set;}