Поскольку единственный публичный способ установить свойство MaximumLength
- через конструктор атрибута, нет никакого программного способа изменить его после постстроения. Вы всегда можете использовать частное отражение, чтобы делать то, что вам нужно, при условии, что вы выполняете код с достаточным доверием. Если вы не хотите (или не можете) идти по этому пути, другим вариантом будет поменять модель представления при заданных условиях, а не просто обновить атрибуты по мере необходимости. Затем вы можете просто создать необходимый атрибут для каждой отдельной модели представления и не беспокоиться о программном изменении самого атрибута.
Последний вариант - написать собственный атрибут StringLength
. Вы можете легко имитировать функциональность встроенной версии, поскольку ее метод IsValid()
действительно прост:
public override bool IsValid(object value)
{
int num = (value == null) ? 0 : ((string)value).Length;
return value == null || (num >= this.MinimumLength && num <= this.MaximumLength);
}
Подражая этому, но добавив сеттер public
в свойство MaximumLength
, вы получите то, что вам нужно.