Подтвердить что ты не робот

Изменить значение ErrorMessage по умолчанию для проверки StringLength

Ошибка ErrorMessage по умолчанию для проверки StringLength намного длиннее, чем хотелось бы:

Поле {Name} должно быть строкой с максимальной длиной {StringLength}.

Я хотел бы изменить его повсеместно на что-то вроде:

Максимальная длина - {StringLength}.

Я бы хотел избежать избыточного указания ErrorMessage для каждой строки, которую я объявляю:

    [StringLength(20, ErrorMessage="Maximum length is 20")]
    public string OfficePhone { get; set; }
    [StringLength(20, ErrorMessage="Maximum length is 20")]
    public string CellPhone { get; set; }

Я уверен, что я помню, что был простой способ повсеместно изменить ErrorMessage, но не могу его вспомнить.

EDIT:

Для пояснения я пытаюсь повсеместно изменить значение ErrorMessage по умолчанию, чтобы я мог ввести:

    [StringLength(20)]
    public string OfficePhone { get; set; }

и получите сообщение об ошибке:

Максимальная длина - 20.

4b9b3361

Ответ 1

Вы можете указать атрибут StringLength следующим образом по многочисленным свойствам

[StringLength(20, ErrorMessageResourceName = "StringLengthMessage", ErrorMessageResourceType = typeof(Resource))]
public string OfficePhone { get; set; }
[StringLength(20, ErrorMessageResourceName = "StringLengthMessage", ErrorMessageResourceType = typeof(Resource))]
public string CellPhone { get; set; }

и добавьте строковый ресурс (с именем StringLengthMessage) в файл ресурса

"Maximum length is {1}"

Сообщение определяется один раз и имеет держатель переменной места размещения, если вы передумали относительно длины для проверки.

Вы можете указать следующее:

  • {0} - Имя
  • {1} - Максимальная длина
  • {2} - Минимальная длина

Обновление

Чтобы свести к минимуму дублирование, вы можете подклассифицировать StringLengthAttribute:

public class MyStringLengthAttribute : StringLengthAttribute
{
    public MyStringLengthAttribute() : this(20)
    {
    }

    public MyStringLengthAttribute(int maximumLength) : base(maximumLength)
    {
        base.ErrorMessageResourceName = "StringLengthMessage";
        base.ErrorMessageResourceType = typeof (Resource);
    }
}

Или вы можете переопределить FormatErrorMessage, если хотите добавить дополнительные параметры. Теперь свойства выглядят следующим образом:

[MyStringLength]
public string OfficePhone { get; set; }
[MyStringLength]
public string CellPhone { get; set; }

Ответ 2

Попробуйте

[ StringLength(20, ErrorMessage = "Maximum length is {1}") ]

если я правильно помню, что это должно быть.