Изменить значение по умолчанию ErrorMessage для проверки StringLength - PullRequest
28 голосов
/ 03 марта 2012

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

Поле {Имя} должно быть строкой с максимальной длиной {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.

Ответы [ 2 ]

57 голосов
/ 03 марта 2012

Вы можете указать атрибут 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}"

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

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

  1. {0} - Имя
  2. {1} - Максимальная длина
  3. {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; }
6 голосов
/ 03 марта 2012

Попробуйте

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...