Атрибут StringLengthAttribute не работает - PullRequest
9 голосов
/ 23 января 2011

Вот мой тестовый класс с аннотациями данных:

class Test
{
  [Required, StringLength(10)]
  public string MyProperty { get; set; }
}

Вот моя консольная тестовая программа:

class Program
{
  static void Main(string[] args)
  {
    var test = new Test {
      MyProperty = "this is way more than 10 characters and should fail."
    };

    var context = new ValidationContext(test, null, null);

    // No exception here! (why not?)
    Validator.ValidateObject(test, context);

    test.MyProperty = null;

    // Exception here, as expected
    Validator.ValidateObject(test, context);
  }
}

По какой-то причине я не получаю исключение проверки, когдаДлина строки слишком велика.Я получаю исключение проверки (как и ожидалось), когда я устанавливаю свойство в null и повторно проверяю.Есть идеи, почему моя аннотация длины строки не применяется?

Ответы [ 2 ]

22 голосов
/ 23 января 2011

Это немного не интуитивно понятно, но меняется

Validator.ValidateObject(test, context);

до

Validator.ValidateObject(test, context, true);

решает проблему. Третий аргумент bool validateAllProperties. Я не уверен, почему атрибут [Required] ранее применялся, а [StringLength] - нет, но, по крайней мере, теперь он работает.

3 голосов
/ 01 июня 2011

Спасибо за публикацию этого. Я опубликовал ошибку в Microsoft Connect для этой проблемы. Я предполагаю, что они неправильно пропускают свойство System.String, поскольку оно не является типом значения, потому что они не выполняют глубокую / рекурсивную проверку без параметра validateAllProperties.

Вот ссылка на ошибку, если вам интересно: https://connect.microsoft.com/VisualStudio/feedback/details/672247/system-componentmodel-dataannotations-validator-does-not-validate-stringlengthattribute-unless-validateallproperties-specified

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