2011-01-22 60 views
10

在我的模型中,似乎Validate()僅在兩個屬性通過驗證後才被調用。爲什麼僅在屬性驗證通過時調用IValidatableObject.Validate?

public class MyModel : IValidatableObject 
{ 
    [Required] 
    public string Name { get; set;} 

    [Required] 
    public string Nicknames {get; set;} 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     if(Nicknames != null && Nicknames.Split(Environment.NewLine.ToCharArray()).Count() < 2) 
      return yield result new ValidationResult("Enter at least two nicknames, new [] { "Nicknames" }); 
    } 
} 

當用戶進入在Nicknames文本區域中的文本的一行但離開Name文本框爲空,則僅顯示爲Name屬性Required錯誤消息。應該從Validate()函數中顯示的錯誤消息從不出現。

只有在Name文本框中輸入名稱和Nicknames文本中的某些文本後,纔會調用Validate()函數。

這是應該如何工作?在當前頁面上導致錯誤時,用戶在隨後的頁面上顯示錯誤消息似乎很奇怪。

回答

14

這是設計。在所有屬性都通過驗證之前,對象級驗證不會觸發,否則可能導致對象不完整。 Validate方法用於比較一個屬性與另一個屬性。在你的情況下,你應該寫一個自定義屬性驗證器。

+2

如果驗證方法包含屬性驗證的結果,我們可以自己檢查。即void IValidatableObject.Validate(List result,ValidationContext validationContext) – 2011-01-26 09:43:28

相關問題