StringLengthAttribute似乎不起作用

时间:2011-01-23 20:36:18

标签: data-annotations validation ria

这是我的带有数据注释的Test类:

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 个答案:

答案 0 :(得分:22)

这有点不直观,但正在改变

Validator.ValidateObject(test, context);

Validator.ValidateObject(test, context, true);

解决了这个问题。第三个参数是bool validateAllProperties。我不确定为什么[Required]属性之前的[StringLength]属性已被强制执行,但至少它现在都有效。

答案 1 :(得分:3)

感谢您发布此内容。我在此问题上发布了Microsoft Connect上的错误。我假设他们错误地跳过了System.String属性,因为它不是值类型,因为没有“validateAllProperties”参数它们不会进行深度/递归验证。

如果您有兴趣,可以使用以下错误链接: https://connect.microsoft.com/VisualStudio/feedback/details/672247/system-componentmodel-dataannotations-validator-does-not-validate-stringlengthattribute-unless-validateallproperties-specified