Как заменить стандартные сообщения об ошибках DataAnnotations

Я использую Систему. ComponontModel. DataAnnotations для проверки моих объектов модели. Как я мог заменить атрибуты стандарта сообщений (Требуемый, и StringLength) производят, не предоставляя атрибут ErrorMessage каждому из них или sub классификация их?

7
задан Artem Tikhomirov 1 February 2010 в 22:27
поделиться

2 ответа

Написание нового сообщения, потому что мне нужно больше форматирования, чем предоставляют комментарии.

Посмотрите ValidationAttribute - базовый класс атрибутов проверки.

Если произошла ошибка проверки, сообщение об ошибке будет создано методом:

public virtual string FormatErrorMessage(string name)
{
    return string.Format(CultureInfo.CurrentCulture, this.ErrorMessageString, new object[] { name });
}

Затем посмотрите на свойство ErrorMessageString :

protected string ErrorMessageString
{
    get
    {
        if (this._resourceModeAccessorIncomplete)
        {
            throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, DataAnnotationsResources.ValidationAttribute_NeedBothResourceTypeAndResourceName, new object[0]));
        }
        return this.ResourceAccessor();
    }
}

Свойство ResourceAccessor можно установить из:

ValidationAttribute..ctor(Func<String>)
ValidationAttribute.set_ErrorMessage(String) : Void
ValidationAttribute.SetResourceAccessorByPropertyLookup() : Void

Первый из них точно используется классами dervided для форматирования сообщений, второй - случай, когда мы устанавливаем сообщение об ошибке через свойство ErrorMessage , а третий - когда используются строки ресурсов. В зависимости от вашей ситуации, вы можете использовать ErrorMessageResourceName .

В другом месте давайте посмотрим на производные конструкторы, например на атрибут Range:

private RangeAttribute()
    : base((Func<string>) (() => DataAnnotationsResources.RangeAttribute_ValidationError))
{
}

Здесь RangeAttribute_ValidationError загружается из ресурса:

internal static string RangeAttribute_ValidationError
{
    get
    {
        return ResourceManager.GetString("RangeAttribute_ValidationError", resourceCulture);
    }
}

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

http://www.codeproject.com/KB/aspnet/SatellAssemblies.aspx

http://msdn.microsoft.com/en-us/library/aa645513 (VS.71) .aspx

8
ответ дан 6 December 2019 в 15:22
поделиться

Я считаю, что счетчик _Total является просто агрегатом для ситуаций, когда существует несколько экземпляров одного счетчика. В некоторых случаях, например Processor -% Process Time, оно обеспечивает среднее значение по всем экземплярам.

Выбор опции «Все экземпляры» - это просто способ быстрого включения всех счетчиков экземпляров (сохранение проблем выбора каждого из них по отдельности).

-121--4013089-

Конечно! Нужно просто сбросить метки галочек.

EDIT с ответом и картиной (можно выполнить аналогично hist ):

x = scipy.arange(4)
y = scipy.array([4,7,6,5])
f = pylab.figure()
ax = f.add_axes([0.1, 0.1, 0.8, 0.8])
ax.bar(x, y, align='center')
ax.set_xticks(x)
ax.set_xticklabels(['Aye', 'Bee', 'Cee', 'Dee'])
f.show()

alt text
(источник: stevetjoa.com )

-121--2383252-

Свойство ErrorMessage базового класса ValidationAttribute можно использовать для всех средств проверки DataAnnotations.

Например:

[Range(0, 100, ErrorMessage = "Value for {0} must be between {1} and {2}")]
public int id;

Может быть, это поможет.

6
ответ дан 6 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: