2010-09-13 41 views
3

我遇到一些无法理解的验证逻辑behing DataAnnotation验证:ASP.NET MVC:DataAnnotation验证执行顺序

以下模型:

[AlwaysInvalid] 
public class TestModel 
{ 
    [Required] 
    public string Test { get; set; } 
} 

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] 
public class AlwaysInvalidAttribute : ValidationAttribute 
{ 
    private readonly object typeId = new object(); 

    public AlwaysInvalidAttribute() : base("Fail !") {} 

    public override object TypeId { get { return this.typeId; } } 

    public override bool IsValid(object value) 
    { 
     return false; 
    } 
} 

的AlwaysInvalidAttribute错误信息被只有在显示必需的属性是有效的:我无法同时获得这两个消息。任何人都知道为什么?我认为这是DefaultModelBinder的一个问题,但仍然没有找到在哪里或为什么。

回答

4

只有在所有属性级验证程序都成功时才会运行级别验证程序。此行为在ModelValidator类中进行了编码。