2010-09-13 45 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類中進行了編碼。