StringLengthAttribute doesn't seem to be working

安稳与你 提交于 2019-11-29 13:33:15

问题


Here is my Test class with data annotations:

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

Here is my console test program:

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);
  }
}

For some reason, I do not get a validation exception when the string length is too long. I do get a validation exception (as expected) when I set the property to null and re-validate. Any ideas why my string length annotation is not being enforced?


回答1:


It's a bit non-intuitive, but changing

Validator.ValidateObject(test, context);

to

Validator.ValidateObject(test, context, true);

solves the problem. The third argument is bool validateAllProperties. I'm not sure why the [Required] attribute was previously being enforced while the [StringLength] wasn't, but at least it all works now.




回答2:


Thanks for posting this. I posted a bug on Microsoft Connect for this issue. I assume that they are incorrectly skipping a System.String property as it is not a value type because they do not do a deep/recursive validation without the "validateAllProperties" parameter.

Here's the bug link if you're interested: https://connect.microsoft.com/VisualStudio/feedback/details/672247/system-componentmodel-dataannotations-validator-does-not-validate-stringlengthattribute-unless-validateallproperties-specified



来源:https://stackoverflow.com/questions/4776337/stringlengthattribute-doesnt-seem-to-be-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!