2015-10-14 22 views
1

我有這樣的代碼在我的課:多DataAnnotation不起作用

[Required(
    ErrorMessageResourceType = typeof (Resources), 
    ErrorMessageResourceName = "VALIDATION_ERROR_ISO" 
    )] 
[StringLength(3, 
    ErrorMessageResourceType = typeof (Resources), 
    ErrorMessageResourceName = "VALIDATION_ERROR_STRING_LENGTH_3" 
    )] 

public virtual string ISO 
{ 
    get { return iso; } 
    set 
    { 
     iso = value; 
     OnPropertyChanged("ISO"); 
    } 
} 

這種方法來驗證:

public bool IsValid 
{ 
    get 
    { 
     var validationContext = new ValidationContext(this, null, null); 
     return Validator.TryValidateObject(this, validationContext, validationResults); 
    } 
} 

在我的單元測試:

var testLanguage = new Language(){ISO = "More than 3 characters"}; 
Assert.IsTrue(!testLanguage.IsValid); 

這是有效的。如果ISO屬性爲空,則由於必需的屬性而無效。看來我的IsValid沒有檢查Stringlength(3)屬性?

我使用Visual Studio 2010

預先感謝您

編輯:

我發現我的錯誤:

return Validator.TryValidateObject(this, validationContext, validationResults); 

需要真正的標誌來檢查所有屬性。現在它適用於:

return Validator.TryValidateObject(this, validationContext, validationResults, true); 

回答

1

把它顛倒,它會工作。試試這個

[StringLength(3, 
    ErrorMessageResourceType = typeof (Resources), 
    ErrorMessageResourceName = "VALIDATION_ERROR_STRING_LENGTH_3" 
    )] 
[Required(
    ErrorMessageResourceType = typeof (Resources), 
    ErrorMessageResourceName = "VALIDATION_ERROR_ISO" 
    )] 
public virtual string ISO 
{ 
    get { return iso; } 
    set 
    { 
     iso = value; 
     OnPropertyChanged("ISO"); 
    } 
} 
+0

這並沒有爲我工作... – GrayFox

+0

創建一個樣本MVC應用程序和一個文本框結合ISO和我的代碼將工作。我已經測試了我的環境。如果在StringLength之前放置Required,則StringLength驗證不會觸發,但反之亦然。 –