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?
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.