2011-11-17 71 views
1

我正在写一个来自ReactiveValidatedObject的视图模型。这使我可以使用数据注释来触发对视图的验证,但是我遇到了一个问题:验证规则以似乎是随机顺序的方式进行评估。数据注释的确定性评估顺序?

例如,如果该属性声明如下(模型的字段是一个小数,并且该方法验证只是做decimal.TryParse,并检查该值是否> = 0):

private string abc; 
    [ValidatesViaMethod(ErrorMessage = "Invalid", AllowNull = true] 
    [Required(ErrorMessage = "Required")] 
    public string Abc { /* ... */ } 

我有单元测试,以确保行为如下:

  • 如果该字段为空,错误应为“必需”。
  • 如果该字段有不解析的内容,则该错误应为“无效”。

有时候,我会在另一个文件中改变一些东西,运行所有的测试,并且这个失败。交换属性声明中属性的顺序可以修复测试。

有什么方法可以指定这些属性应用于哪个顺序?

+0

哇,你发现了一个新的和有趣的方式来标记到标题中!恭喜!另外,在规范中我没有知道任何属性都有秩序。 – Will

回答

1

我不相信有任何方法可以指定顺序,它是Reflection返回它们的顺序。您可能必须操纵您的IsAbcValid才能检测到null并(错误地)将其标记为有效。

+0

太糟糕了。感谢您的提示,这将会解决问题。 –